이 문제는 부르트포스 알고리즘
을 사용한다.
9명 중에서 2명을 뺏을 경우에 출력을 하고 프로그램을 종료한다.
9
명의 키를 탐색하면서 i 번재 난쟁이의 키
를 빼고 j 번째 키의 난쟁이
를 뺏을 때100
이 된다면 출력한다.키는 0
보다 크기 때문에 i
번째와 j
번째 키를 빼는 것이 정답이라면 i
번째와 j
번째 키를 가장 앞으로 올 수 있도록 0
으로 재대입하고 정렬을 한다.
그 이후 0
이 된 i
와 j
번째 키는 맨 앞의 2 자리
를 차지하므로 그 다음 자리부터 출력을 해주면 그 키를 제외한 나머지 키들을 정렬한 배열을 출력할 수 있다.
참고: 출력하고 난 뒤에는 반복문에
break
를 걸어서 빠져나와야 한다. 안그러면 다른 경우의 수도 출력해서 오답 처리가 된다.
public class bj2309 {
public static void main(String[] args) throws Exception {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int sum = 0;
int[] h = new int[9];
for (int i = 0; i < 9; i++) {
h[i] = Integer.parseInt(br.readLine());
sum += h[i];
}
// 반복문을 빠져나오기 위한 조건
int finish = 0;
for (int i = 0; i < 8; i++) {
if (finish == 1) break;
for (int j = i + 1; j < 9; j++) {
if (finish == 1) break;
// i와 j 번째 키를 뺏을때 100이 될 때
if (sum - h[i] - h[j] == 100) {
// i와 j 번째 키를 0으로 변경
h[i] = 0;
h[j] = 0;
// 정렬
Arrays.sort(h);
// 앞에 0이 된 i와 j 이후의 정렬된 키들 출력
for (int z = 2; z < 9; z++) {
bw.write(h[z] + "\n");
}
// 이제 다음부터 반복문 반복 안하기 위해
finish = 1;
}
}
}
bw.flush();
bw.close();
br.close();
}
}