백준 - 일곱 난쟁이 (브론즈 1)

2024. 2. 28. 04:04코딩테스트 정리(자바)

728x90

백트래킹 풀이

 

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    static int[] height = new int[9];
    static boolean[] visited = new boolean[9];
    static boolean find = false;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 9; i++) {
            height[i] = sc.nextInt();
        }

        Arrays.sort(height);
        findDwarf(0, 0, 0);
    }

    static void findDwarf(int index, int count, int sum) {
        if (find) {
            return;
        }

        if (count == 7 && sum == 100) {
            for (int i = 0; i < 9; i++) {
                if (visited[i]) {
                    System.out.println(height[i]);
                }
            }
            find = true;
            return;
        }

        if (count > 7 || sum > 100 || index == 9) {
            return;
        }

        visited[index] = true;
        findDwarf(index + 1, count + 1, sum + height[index]);

        visited[index] = false;
        findDwarf(index + 1, count, sum);
    }
}

 

이 문제는 이렇게 어렵게 안 풀어도 될 듯하다..


브루트포스 풀이

: 1. 아홉 난쟁이의 키를 다 더한다

2. 앞에서부터 순서대로 2개씩 빼서 100이 되는지 확인한다

3. 다 찾았으면 뺀 2명의 키를 0으로 바꾼다

4. 오름차순으로 정렬한다

5. 0으로 바꾼 2명을 제외하고 출력해야하므로

k는 2부터 시작하여 출력.

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;
                }
            }
        }
    }
}
728x90