1. 문제

www.acmicpc.net/problem/2309

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

2. 접근방법

조합을 이용하는 아주 기본적인 문제

 

9명의 난쟁이 중 7명의 난쟁이를 뽑아 그 합이 100이 되는 경우를 찾으면 된다.

 

9 C 7 의 문제

 


3. 풀이

1. 난쟁이들 배열에 넣어두고

2. 9명 중 7명 뽑는 경우를 모두 구하고

3. 그 중 합이 100이 되는 경우를 찾으면

4. 그 때의 난쟁이들을 sort해서 출력

4. 자바 코드

package Bronze;

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

public class P2309일곱난쟁이 {
	static int N = 9;
	static int nangen[] = new int[N];
	static int R = 7;
	static int sel[] = new int[R];
	static int h_idx[];

	static void Search(int idx, int s_idx) {
		if (s_idx == R) {
			int sum = 0;
			for (int i = 0; i < R; i++)
				sum += sel[i];
			if (sum == 100) {
				h_idx = (int[])sel.clone();
			}

			return;
		}
		if(idx == N)
			return;
		
		sel[s_idx] = nangen[idx];
		Search(idx+1, s_idx+1);
		Search(idx+1, s_idx);

	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		for (int i = 0; i < N; i++)
			nangen[i] = sc.nextInt();
		
		
		Search(0,0);
		Arrays.sort(h_idx);
		for(int i : h_idx)
			System.out.println(i);
		

	}

}

5. 마치며

아주 기본적인 조합을 이용해보는 문제였다.

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준] 2491 수열  (0) 2020.09.24
[백준] 2605줄세우기  (0) 2020.09.24
[백준] 10158 개미  (0) 2020.09.23
[백준] 2477 참외밭  (1) 2020.09.23
[백준] 1244 스위치 켜고 끄기  (0) 2020.09.19

+ Recent posts