Algorithm & SQL/BOJ

[백준 2309번 / Java] BOJ 2309 : 일곱 난쟁이

김룹 2024. 3. 16. 09:33

 

 

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

 

 

 

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] dwarf = new int[9];
        int sum = 0;

        for(int i = 0; i < 9; i++) {
            dwarf[i] = Integer.parseInt(br.readLine());
            sum += dwarf[i];
        }
        int num = sum; // for문 돌리면서 sum값을 초기화 시키기 위해 num 변수 선언

        outer:
        for(int i = 0; i < 8; i++) {
            for(int j = i + 1; j < 9; j++) {
                sum -= (dwarf[i] + dwarf[j]); // 9명에서 2명을 빼서 7명 키의 합을 구한다
                if(sum == 100) { // 100이 된다면 i와 j 난쟁이를 없애기
                    dwarf[i] = 0;
                    dwarf[j] = 0;
                    break outer;
                }
                sum = num; // sum값 초기화
            }
        }
        Arrays.sort(dwarf); // 오름차순 정렬
        StringBuilder sb = new StringBuilder();
        for(int i = 2; i < 9; i++) { // 0번, 1번 인덱스는 0일테니(없앤 난쟁이 자리) 2번부터 출력
            sb.append(dwarf[i]).append("\n");
        }
        System.out.println(sb);
    }
}

 

 

 

👇 제출한 코드

느낀 점 및 정리 ✍️

1. 처음에는 7명을 구하려고 하다가 메모리 초과가 났다. 그래서 주어지는 9명과 뽑아야하는 7명의 숫자는 고정되어있으니 2명만 찾아서 빼는 방식으로 구현하였다. 

2. 2중 for문을 돌리면서 i번째, j번째에 있는 난쟁이들을 없애보며 키의 합이 100이 될 때를 찾아냈다