티스토리 뷰

728x90

문제

https://www.acmicpc.net/problem/2309

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

 

풀이 및 소스코드

 

아무거나 하나 출력하는 것이기 때문에

하나라도 총합 100을 채웠다면 종료해줘야한다.

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

class Main {
	static int[] s = new int[7];
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int[] nan = new int[9];
		for(int i=0;i<9;i++) {
			nan[i] = Integer.parseInt(br.readLine());
		}
		
		Arrays.sort(nan);
		combi(0, 0, 0, nan);
	}
	public static void combi(int start, int cnt, int sum, int[] nan) {
		if(cnt == 7) {
			if(sum==100) {
				for(int i=0;i<7;i++) { 
					System.out.println(nan[s[i]]);
				}
				System.exit(0);
			}
			return;
		}
		if(sum>100) {
			return;
		}
		
		for(int i=start; i<9;i++) {
			s[cnt] = i;
			combi(i+1, cnt+1, sum+nan[i], nan);
		}
	}

	
}
반응형