백준 2309 - 일곱 난쟁이

백준

사진을 클릭하시면 문제로 이동하실 수 있습니다.

문제

왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다. 아홉 명의 난쟁이는 모두 자신이 “백설 공주와 일곱 난쟁이”의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을 기억해 냈다. 아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시오.

입력

아홉 개의 줄에 걸쳐 일곱 난쟁이의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러가지인 경우에는 아무거나 출력한다.

출력

일곱 난쟁이의 키를 오름차순으로 출력한다.

예제입력

20
7
23
19
10
15
25
8
13

예제출력

7
8
10
13
19
20
23

나의 풀이

package backjun;

	import java.io.BufferedReader;
	import java.io.IOException;
	import java.io.InputStreamReader;
	import java.util.Arrays;

	public class Q2309 {
		public static void main(String[] args) throws NumberFormatException, IOException {
			BufferedReader sb = new BufferedReader(new InputStreamReader(System.in));

			int[] heights = new int[9];
			boolean[] result = new boolean[9];
			int sum = 0;

			for(int i=0; i<9; i++) {
				heights[i] = Integer.parseInt(sb.readLine());
				sum += heights[i];
			}

			for(int i=0; i<8; i++) {
				int result1 = sum - heights[i];
				boolean t = false;
				for(int j=i+1; j<9; j++) {
					if(result1 - heights[j] == 100) {
						result[i] = true;
						result[j] = true;
						t = true;
						break;
					}
				}
				if(t) break;
			}

			for(int i=0; i<9; i++) {
				if(result[i]) {
					heights[i] = 100;
				}
			}


			Arrays.sort(heights);

			for(int i=0; i<7; i++) System.out.println(heights[i]);

		}

	}

후기

처음에 접근 방식을 모든 수에 대한 덧셈으로 100을 구할려했는데 7가지만 더하는게 아닌 9개의 수를 차례대로 더하다가 100이 넘으면 그 배열만 지우고 다음 index로 넘어가는 코드를 짯다가 끝까지 문제가 풀리지 않았다… 왜냐하면 이 문제는 7개의 수의 덧셈에 대해서 구해야하는데 나는 모든수를 더하는 것으로 방향을 잡았기 때문에 예제만 통과하였다. 결국 문제점을 다른사람의 풀이를 보고 다시 고쳐서 시도한 결과 통과하였는데 난 다른사람의 풀이를 볼때까지 문제점을 찾지못하였다. 다음부터는 시간을 정해놓고 시도하고 안되면 빨리 다른사람의 풀이를 보고 나의 방향이 잘못됬는지 검사를 하는걸로..

Comments