[백준] 2309번 : 일곱 난쟁이 - JAVA [자바]

가오리·2023년 11월 28일
0
post-thumbnail

https://www.acmicpc.net/problem/2309


이 문제는 부르트포스 알고리즘을 사용한다.

9명 중에서 2명을 뺏을 경우에 출력을 하고 프로그램을 종료한다.

  1. 9명의 키를 탐색하면서 i 번재 난쟁이의 키를 빼고
  2. j 번째 키의 난쟁이를 뺏을 때
  3. 나머지 키들의 합이 100이 된다면 출력한다.

키는 0보다 크기 때문에 i 번째와 j 번째 키를 빼는 것이 정답이라면 i 번째와 j 번째 키를 가장 앞으로 올 수 있도록 0으로 재대입하고 정렬을 한다.
그 이후 0이 된 ij 번째 키는 맨 앞의 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();
    }
}
profile
가오리의 개발 이야기

0개의 댓글