ALGORITHM

백준 2309 일곱 난쟁이 (Java)

공부하는_다온 2023. 1. 13. 23:08

1. 문제 링크

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

 

2. 문제 및 입출력 예제

 

3. 문제 풀이

일곱명이라는 단어에 꽂히는 게 아니라

총 합에서 차를 뺀다고 생각했다.

 

아홉 난쟁이의 키를 다 합치고 100만큼 뺄 때 남은 값이

일곱 난쟁이가 아니었던 두 명의 키의 합이다.

 

4. 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        
        int[] height = new int[9];
        int sum = 0;
        for(int i=0; i<9; i++) {
        	String key = br.readLine();
        	height[i] = Integer.parseInt(key);
        	sum += height[i];
        }
        
        Arrays.sort(height); //오름차순 정렬

        int temp = 0;
        int num1=0, num2=0;
        boolean stop = false;
        for(int i=0;i<8;i++) {
        	for(int j=1;j<9;j++) {
        		if(i!=j) //i와 j가 달라야 함
        		temp = height[i]+height[j];
        		if(sum - temp == 100 ) { //전체 합에서 두 키의 합을 뺐을 때 100
        			num1 = i;
        			num2 = j;
        			stop = true;
        			break;
        		}
        	}
    		if(stop) break;
        }
        
        for(int i=0;i<9;i++) { //출력
        	if(i!=num1 && i!=num2) {
        		sb.append(height[i]+"\n");
        	}
        }
        
        System.out.println(sb);
	}
}