본문 바로가기
자료구조&알고리즘/완전 탐색 (브루트 포스)

[백준] 조합 - 2309번 일곱 난쟁이 (Java)

by _din 2022. 2. 21.

문제링크

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

 

접근한 방법

- 조합

 


풀이방법

https://doongjeol.tistory.com/137?category=815887 참조


실수한점

  • 다른 언어도 함께 공부하다보니, result = arr 이렇게 선언해버리는 실수를 하였다.

 

소스코드

import java.io.*;
import java.util.Arrays;

public class Q_2309_SevenDwarf {
    public static int[] result;
    public static int[] dwarf = new int[9];
    public static void combination(int[] arr, int n, int r, int count, int depth){
        if(count == r){
            int sum = 0;
            for(int i=0 ; i<arr.length ; i++){
                sum += arr[i];
            }
            
            // null일 때 한번만 넣어주기
            if(sum == 100 && result == null){
                result = arr.clone();

            }
            return;
        }

        for(int i=depth ; i<n ; i++){
            arr[count] = dwarf[i];
            combination(arr, n, r, count+1, i+1);

        }
    }


    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        for (int i = 0; i < dwarf.length; i++) {
            dwarf[i] = Integer.parseInt(br.readLine());
        }

        combination(new int[7], dwarf.length, 7, 0, 0);
        Arrays.sort(result);
        for (int i = 0; i < result.length; i++) {
            bw.write(result[i]+"\n");
        }

        br.close();
        bw.close();
    }
}
반응형

댓글