철갑이의 이모저모

[백준] 2309(일곱 난쟁이) with java 본문

알고리즘

[백준] 2309(일곱 난쟁이) with java

철갑 2022. 8. 15. 20:28
728x90

문제

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

풀이

1. 모든 난쟁이의 키를 합해줍니다.

2. 7명의 난쟁이 키의 합이 100이기 때문에 즉,

(9명 난쟁이 키의 합) - (2명 가짜 난쟁이 키의 합) = 100

이라고 볼 수 있습니다.

 

분명 맞은 것 같은데 계속 틀려서 고민을 했습니다..

▼ 그래서 찾은 반례

더보기

20
7
23
19
10
15
24
8

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

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
        int[] arr = new int[9];
        int sum = 0;
        
        // 9명의 난쟁이 키의 합
        for (int i = 0; i < 9; i++) {
            arr[i] = Integer.parseInt(br.readLine());
            sum += arr[i];
        }
        
        // 9명 키의 합에서 2명 키를 뺐을때 100 이면 break
        for (int i = 0; i < 8; i++) {
			for (int j = i + 1; j < 9; j++) {
				if (sum - (arr[i] + arr[j]) == 100) {
					arr[i] = 101;
					arr[j] = 101;
					i = 8;
					break;
				}
			}
		}

		Arrays.sort(arr);

		// 7 명의 난쟁이 키 출력 (조건문으로 101이 아닌 키를 출력해도 됨)
		for (int i = 0; i < 7; i++) {
			bw.write(arr[i] + "\n");
		}

		bw.flush();
		bw.close();
	
	}
}

728x90