컴퓨터 공학/백준
[백준] JAVA 자바 : 일곱 난쟁이 (2309번)
kim-dev
2024. 6. 21. 22:05
반응형
주어진 아홉 마리의 난쟁이의 키를 보고, 일곱 마리의 난쟁이의 키를 구하는 것이다.
이 문제는 어렵지 않게 구할 수 있다. 나는 아래와 같은 로직으로 해결했다.
1. 아홉 마리의 난쟁이의 키를 모두 더한 후, 100과 빼서 그 차이(diff)를 구한다.
2. 아홉 마리의 난쟁이의 키를 중첩 반복문으로 돌면서, 둘의 키의 합이 diff가 되는 두 i, j를 구한다.
3. i번째와 j번째 난쟁이의 키를 0으로 만든 후 배열을 정렬하고 출력한다.
이 정도만 보면 다들 쉽게 해결할 수 있을 거라고 생각한다.
i와 j를 구했다면 diff를 9999로 바꿔주어야 하는데, 그 과정이 없다면 외부 for문을 계속 돌아서 똑같은 i와 j 밸류가 있다면 그것까지 0으로 바꾸기 때문...
import java.util.*;
import java.io.*;
public class SevenDwarfs {
public static int stoi(String str) {
return Integer.parseInt(str);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int sum = 0;
int[] dwarf = new int[9];
for (int i=0; i<9; i++) {
int tmp = stoi(br.readLine());
dwarf[i] = tmp;
sum += tmp;
}
Arrays.sort(dwarf);
int diff = sum - 100; // 합계와 100간의 차이를 구함
a: for(int i=0; i<8; i++) {
for (int j=(i+1); j<9; j++) {
if (dwarf[i]+dwarf[j] == diff) { // 차이 나게 하는 두 난쟁이를 구하면
dwarf[i] = 0; // 키를 0으로 만들어 배제시킨다
dwarf[j] = 0;
diff = 9999; // break;는 내부for문만 벗어날 수 있으므로 diff를 바꿔서 조건이 더 만족되지 않게 바꿔준다
}
}
}
Arrays.sort(dwarf);
// 키가 0이 아닌 난쟁이들의 키 출력
for (int i=2; i<9; i++) {
System.out.println(dwarf[i]);
}
}
}