본문 바로가기

알고리즘 문제풀이/백준

[BOJ][JAVA] 3040 - 백설 공주와 일곱 난쟁이

문제 출처 : https://www.acmicpc.net/problem/3040

 

3040번: 백설 공주와 일곱 난쟁이

매일 매일 일곱 난쟁이는 광산으로 일을 하러 간다. 난쟁이가 일을 하는 동안 백설공주는 그들을 위해 저녁 식사를 준비한다. 백설공주는 의자 일곱개, 접시 일곱개, 나이프 일곱개를 준비한다.

www.acmicpc.net

 

 

문제

 

 

설명

백설 공주는 공주가 되기 전에 유명한 수학자였다니ㅋㅋㅋㅋ설명이 재미있는 문제였습니다ㅎㅎ

문제에도 나와 있듯 한 마디로, 아홉 개의 수 중 합이 100이 되는 일곱 개의 수를 찾는 문제이기때문에, 조합으로 비교적 쉽게 풀 수 있는 문제였습니다:)

 

코드

import java.util.Scanner;

//조합

public class BOJ3040_SnowWhite {

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

	private static void comb(int cnt, int start) {
		
		if(cnt==7) { //다 뽑았다면
			int sum=0;
			for(int i=0; i<7; i++) {
				sum+=result[i];
			}
			
			if(sum==100) {
				for(int i=0; i<7; i++)
					System.out.println(result[i]);
			}
			return;
		}
		
		for(int i=start; i<9; i++) {
			
			result[cnt] = dwarfs[i];
			comb(cnt+1, i+1);
			
		}
	}
}