https://www.acmicpc.net/problem/2309
2309번: 일곱 난쟁이
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
www.acmicpc.net
문제를 읽다가 너무 귀여워서 피식했다 ㅋㅋㅋ

풀이 방법
9명 중 가짜 2명을 골라내야 되는데 키의 합이 100이라는 것이 힌트.
7명의 조합을 찾으려면 for문이 말도 안 되게 깊어지니까
가짜 2명을 완전탐색으로 빼고 더한 값이 100인지 체크하는 방식으로 풀었다.
코드
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int num = 9; //난쟁이는 9명
int totalHeight = 100;
int[] height = new int[num];
int liar1 = 0;
int liar2 = 0;
for(int i=0; i<num; i++){
height[i] = Integer.parseInt(reader.readLine());
}
Arrays.sort(height); //마지막 출력을 위한 선정렬
boolean isFind = false;
for(int i=0; i<num-1; i++){
for(int j=i+1; j<num; j++){
int sum = 0;
for(int k=0; k<num; k++){
if(k!=i && k!=j){
sum+=height[k];
}
}
if(sum == totalHeight){
liar1 = i;
liar2 = j;
isFind = true;
break;
}
}
if(isFind) break;
}
for(int i=0; i<num; i++){
while(i == liar1 || i == liar2){
++i;
}
if(i < num) System.out.println(height[i]);
}
reader.close();
}
}
'PROGRAMMING > ALGORITHM' 카테고리의 다른 글
| [프로그래머스] 음양 더하기 JAVA KOTLIN (0) | 2021.07.12 |
|---|---|
| [백준] 1476번 날짜 계산 JAVA (0) | 2021.06.20 |
| [프로그래머스] 프린터 JAVA QUEUE (0) | 2021.06.13 |
| [프로그래머스] 가장 큰 수 JAVA (0) | 2021.06.12 |
| [백준] 2193번 이친수 JAVA DP (0) | 2021.06.10 |