• 문제 링크
2785번: 체인
희원이는 그의 다락방에서 N개의 체인을 찾았다. 각각의 체인은 몇 개의 고리로 연결되어 있는데, 각각의 고리는 최대 두 개의 인접한 고리를 가질 수 있다. 각각의 고리는 열고 닫을 수 있다. 그
www.acmicpc.net
• 풀이 과정
적은 개수의 고리를 가진 체인부터 먼저 사용해서 최소값을 구해야 하므로,
각각의 체인의 고리의 개수를 입력받아 배열에 저장 후 오름차순 정렬한다.
이 후 적은 개수의 고리를 가진 체인부터 각각 확인하여
현재까지 확인한 체인의 고리 중 일부분을 사용해 남은 체인을 연결할 수 있다면, (sum >= cnt)
즉 남은 체인의 수 - 1은 열고 닫아야 할 최소한의 고리 수와 같으므로
반복문을 탈출해 해당 값 cnt 를 정답으로써 출력한다.
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++)
arr[i] = Integer.parseInt(st.nextToken());
Arrays.sort(arr);
int cnt = 0;
int sum = 0;
for (int i = 0; i < n; i++) {
cnt = n - i - 1;
sum += arr[i];
if (sum >= cnt)
break;
}
bw.write(String.valueOf(cnt));
bw.flush();
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 1461 도서관 - Greedy / Java (0) | 2022.12.26 |
---|---|
[백준] 1715 카드 정렬하기 - Greedy / Java (0) | 2022.12.25 |
[백준] 2885 초콜릿 식사 - Greedy / Java (0) | 2022.12.23 |
[백준] 2141 우체국 - Greedy / Java (0) | 2022.12.22 |
[백준] 2212 센서 - Greedy / Java (0) | 2022.12.21 |
댓글