https://www.acmicpc.net/problem/3040
문제 요약
의자 , 접시, 나이프 : 7개
난쟁이 : 9명 (진짜 난쟁이는 7명)
모자 100보다 작은 양의 정수가 적혀있다. (진짜 난쟁이)
일곱 난쟁이의 모자에 쓰여있는 숫자의 합 == 100
접근 방식
- 순열을 이용해서 아홉 난쟁이 중에 일곱 난쟁이를 골라냈다.
- 그리고 골라낸 난쟁이가 진짜인지 확인
- 진짜라면 answer 배열에 일곱 난쟁이 넣기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | package day_0810; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class n3040 { static int[] array; static int[] answer; static int[] temp; static boolean[] visited; public static void makeFunc(int cnt, int sum) { if (cnt==7) { if (sum==100) { for (int i = 0; i < 7; i++) { answer[i]=temp[i]; } } return; } for (int i = 0; i < 9; i++) { if (visited[i]) continue; visited[i]=true; temp[cnt]=array[i]; makeFunc(cnt+1, sum+array[i]); visited[i]=false; temp[cnt]=0; } } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); array= new int[9]; visited= new boolean[9]; temp=new int[7]; answer=new int[7]; for(int i=0; i<9; i++) { array[i]=Integer.parseInt(br.readLine()); } makeFunc(0,0); StringBuilder sb= new StringBuilder(); for (int i = 0; i < 7; i++) { sb.append(answer[i]+"\n"); } System.out.println(sb); } } | cs |
'여니의 취준 준비 > 코딩테스트 (Java)' 카테고리의 다른 글
[*11286*] 절댓값 힙 in Java (0) | 2022.08.12 |
---|---|
[15686] 치킨 배달 in Java (0) | 2022.08.12 |
[*16637*] 괄호 추가하기 in Java (0) | 2022.08.11 |
[1074] Z in Java (0) | 2022.08.11 |
[2839] 설탕 배달 in Java (0) | 2022.08.11 |