본문 바로가기
백준

[백준] 2309번 : 일곱 난쟁이 – JAVA [자바]

by Hongwoo 2022. 3. 24.
반응형

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

 


  • 문제


  • 문제 풀이

백준 2309번 일곱 난쟁이는 브루트 포스 기법을 이용해서 푸는 스페셜저지 문제이다. 스페셜저지 문제는 문제의 정답이 여러 가지일 때 유저가 출력한 답이 맞는지 안 맞는지 확인하는 문제이다. 이 문제에서는 9명의 키가 주어진다. 그리고 9명의 키 중에 7개를 골라서 합이 100이 되는 7명을 찾고 그 7명의 키를 오름차순으로 출력해주면 된다.

 

먼저 9명 키의 합 sum을 구해준다. 그리고 2명의 키를 sum에서 빼주고 그 뺀 키가 100이 되면 나머지 7명의 키를 오름차순으로 정렬에서 출력해주면 된다.

for (int i = 0; i < 8; i++) {
  for (int j = i+1; j < 9; j++) {
    if (sum - arr[i] - arr[j] == 100) {
      arr[i] = 0;
      arr[j] = 0;
      Arrays.sort(arr);
      for (int k = 2; k < 9; k++) {
        System.out.println(arr[k]);
      }
      return;
    }
  }
}

  • 코드
import java.util.*;
import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] arr = new int[9];
        int sum = 0;
        for (int i = 0; i < 9; i++) {
            arr[i] = Integer.parseInt(br.readLine());
            sum += arr[i];
        }
        for (int i = 0; i < 8; i++) {
            for (int j = i+1; j < 9; j++) {
                if (sum - arr[i] - arr[j] == 100) {
                    arr[i] = 0;
                    arr[j] = 0;
                    Arrays.sort(arr);
                    for (int k = 2; k < 9; k++) {
                        System.out.println(arr[k]);
                    }
                    return;
                }
            }
        }
    }
}

 


  • 후기

브론즈 2 난이도의 비해서는 조금 어려운 브루트 포스 문제였다.

 

반응형

댓글