백준 2309 - 일곱 난쟁이
접근
- 키의 합은 100
- 그러면 7명을 다 뽑아서 (9C7) 100인지 확인해야 할까? 했지만
- 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);
}
}
}
후기
어…
아직까지는
사실 입력받는게 제일 어려울지도..?