알고리즘/백준
[백준] 2309번 일곱난장이 - Java(브루트포스)
Chung-A
2021. 6. 7. 11:23
[백준] 2309번 일곱난장이 - Java
문제 출처
https://www.acmicpc.net/problem/2309
2309번: 일곱 난쟁이
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
www.acmicpc.net
※ 풀이
전형적으로 브루트포스로 가능한 경우의 수를 다 해보면 되는 문제이다.
가능한 경우의 수를 계산을 해보았을 때 9명의 난쟁이 후보들이 있고 각각 난쟁이일 경우, 아닐경우 경우의 수가 있으니 2^9 정도라고 예상을 해볼 수 있다. 이는 제한시간이 2초임을 감안했을 때 충분히 풀 수 있는 시간이다.
(1초에 약 1억번의 연산이 가능하다고 생각하면 된다)
마지막에 키를 오름차순으로 출력하라고 하였으니 java sort 를 이용하여 정렬 후 출력하였다.
※ 소스코드
import java.io.*;
import java.util.*;
import java.util.stream.*;
public class Main {
static int[] arr = new int[9];
public static void main(String[] args) throws IOException {
//input
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < arr.length; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
boolean isFinish=false;
int sum = Arrays.stream(arr).sum();
for (int i = 0; i < arr.length; i++) {
for(int j=1;j<arr.length;j++){
int temp = sum - arr[i] - arr[j];
if (temp == 100) {
arr[i] = 1000;
arr[j] = 1000;
isFinish = true;
break;
}
}
if(isFinish) break;
}
Arrays.sort(arr);
Arrays.stream(arr).filter(s->s<1000).forEach(s->System.out.println(s));
}
}