알고리즘/구현 & 그리디 & 브루트포스

[백준]JAVA - 2309번: 일곱 난쟁이

K.두부 2022. 9. 13. 21:49
반응형

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

풀이

브루트 포스 기법을 이용해서 해결하는 알고리즘 문제라고 한다. 사실 브루트 포스 기법이 뭔지 잘 모르는 상태에서 풀었다...

 

문제를 푸는 순서는 아래와 같다.

 

1. 9명의 난쟁이 키를 더한다.

2. 난쟁이 키를 오름차순으로 정렬한다.

3. 9명의 난쟁이 키를 합한 값에서 100을 뺀 후, 가짜 난쟁이 두 명을 더한 값과 비교한다.

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int[] high = new int[9];
        int sum = 0;
        for (int i=0; i<high.length; i++) {
            high[i] = Integer.parseInt(br.readLine());
            sum += high[i];
        }
        
        Arrays.sort(high);
        int temp = sum - 100;
        int spyA = 0;
        int spyB = 0;
        for (int i=0; i<high.length-1; i++) {
            for (int j=i+1; j<high.length; j++) {
                if (high[i] + high[j] == temp) {
                    spyA = high[i];
                    spyB = high[j];
                    break;
                }
            }
        }
        
        for (int i=0; i<high.length; i++) {
            if (high[i] == spyA || high[i] == spyB) {
                continue;
            }
            System.out.println(high[i]);
        }
    }
}

 

 

반응형