백준 2309 - 일곱 난쟁이

문제

접근

  1. 키의 합은 100
    1. 그러면 7명을 다 뽑아서 (9C7) 100인지 확인해야 할까? 했지만
  2. 2명만 가짜임. 2명을 뽑아서 전체 합에서 뺀 후 100이라면 7명은 진짜

9C7 = 9C2

와! 단순해졌다!

구현 전

어떻게 이중 루프 탈출시킬까…

누군가 라벨에 대해서 말해줘서 써볼까 했지만 아직 학습하지 않은 내용을 사용하기에는 거부감이 들었다. 따라서 플래그 변수를 통해 진행

구현

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays; // Arrays.sort()를 위해 필요

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int[] dwarfs = new int[9];
        int totalSum = 0;

        // 1. 난쟁이 키 입력 및 총합 계산
        for (int i = 0; i < 9; i++) {
            dwarfs[i] = Integer.parseInt(br.readLine());
            totalSum += dwarfs[i];
        }
        br.close();

        int excludeOne = -1; // 제외할 첫 번째 난쟁이 인덱스 (초기값 -1로 설정)
        int excludeTwo = -1; // 제외할 두 번째 난쟁이 인덱스

        boolean found = false; // 가짜 난쟁이를 찾았는지 여부를 나타내는 플래그 변수

        // 2. 가짜 난쟁이 2명 찾기 (플래그 변수 사용)
        for (int i = 0; i < 8; i++) {
            for (int j = i + 1; j < 9; j++) {
                if ((totalSum - dwarfs[i] - dwarfs[j]) == 100) {
                    excludeOne = i;
                    excludeTwo = j;
                    found = true; // 찾았음 표시
                    break;        // 안쪽 루프 탈출
                }
            }
            if (found) { // 안쪽 루프에서 찾았으면
                break;   // 바깥 루프도 탈출
            }
        }

        // 3. 진짜 일곱 난쟁이의 키 추출
        int[] ansDwarfs = new int[7];
        int idx = 0;

        for (int i = 0; i < 9; i++) {
            if (i == excludeOne || i == excludeTwo) {
                continue; // 가짜 난쟁이는 건너뛰기
            }
            ansDwarfs[idx++] = dwarfs[i]; // 진짜 난쟁이 키 추가
        }

        // 4. 오름차순으로 정렬
        Arrays.sort(ansDwarfs);

        // 5. 결과 출력
        for (int d : ansDwarfs) {
            System.out.println(d);
        }
    }
}

후기

어…

아직까지는

사실 입력받는게 제일 어려울지도..?