반응형
이 문제는 누적합을 이용하여 해결하는 문제입니다.
이 문제를 풀기 위해서는 우선 입력받은 값들을 정렬합니다.
그리고 첫번째 숫자부터 차례대로 더해가면서 누적합을 만듭니다.
그리고 만약 i+1번 자리에 있는 수가 i번까지의 누적합에 1을 더한 값보다 크다면 누적합에 1을 더한 값은 만들 수 없습니다.
이는 i번까지의 누적합이 그 숫자까지 더했을 때 만들 수 있는 수의 최댓값이기 때문입니다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] intArr = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i<N; i++)
intArr[i] = Integer.parseInt(st.nextToken());
Arrays.sort(intArr);
if(intArr[0]>1){
System.out.println(1);
return;
}
int ans = intArr[0];
for(int i = 1; i<N; i++){
if(ans+1<intArr[i]){
ans += 1;
break;
}
ans += intArr[i];
if(i == N-1)
ans++;
}
System.out.println(ans);
}
}
반응형
'알고리즘 > 그리디 알고리즘' 카테고리의 다른 글
백준 1092번 : 배 java (0) | 2022.08.10 |
---|---|
백준 2212번 : 센서 java (0) | 2022.08.09 |
백준 1744번 : 수 묶기 java (0) | 2022.08.05 |
백준 11000번 : 강의실 배정 java (0) | 2022.08.03 |
백준 1715번 : 카드 정렬하기 java (0) | 2022.08.03 |
댓글