본문 바로가기

알고리즘/브루트포스

[백준] 2309번 일곱 난쟁이 java [브루트포스][엄탱]

728x90

문제 링크

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

문제 설명

백설공주는 일곱 난쟁이와 같이 사는데, 어디 갔다 오니 두 명이 추가되어 아홉 난쟁이가 되었다.

여기서 진짜 일곱 난쟁이를 찾는 문제다.

단, 진짜 일곱 난쟁이 키의 합은 100이다.

해설

단순하게 아홉 난쟁이 키에서 두명을 뺐을 경우 키의 합이 100이 되는 경우를 찾아서 일곱 명의 키를 출력하면 된다.

여기서 두명의 난쟁이를 찾을 때 브루트포스 알고리즘을 사용하면 된다.

코드

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

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int[] people = new int[9];
        int sum = 0;
        
        for (int i = 0; i < 9; i++) {
            people[i] = Integer.parseInt(br.readLine());
            sum += people[i];
        }
        
        findSeven(sum, people);
        
        Arrays.sort(people);
        
        for (int i = 0; i < 7; i++) {
            System.out.println(people[i]);
        }

        br.close();
    }
    
    public static void findSeven(int sum, int[] people) {
        for (int i = 0; i < 9; i++) {
            for (int j = i + 1; j < 9; j++) {
                if (sum - people[i] -  people[j] != 100) {
                    continue;
                }
                
                people[i] = Integer.MAX_VALUE;
                people[j] = Integer.MAX_VALUE;
                return;
            }
        }
    }
}
728x90