백준 - 일곱 난쟁이 (브론즈 1)
2024. 2. 28. 04:04ㆍ코딩테스트 정리(자바)
728x90
백트래킹 풀이
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int[] height = new int[9];
static boolean[] visited = new boolean[9];
static boolean find = false;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 9; i++) {
height[i] = sc.nextInt();
}
Arrays.sort(height);
findDwarf(0, 0, 0);
}
static void findDwarf(int index, int count, int sum) {
if (find) {
return;
}
if (count == 7 && sum == 100) {
for (int i = 0; i < 9; i++) {
if (visited[i]) {
System.out.println(height[i]);
}
}
find = true;
return;
}
if (count > 7 || sum > 100 || index == 9) {
return;
}
visited[index] = true;
findDwarf(index + 1, count + 1, sum + height[index]);
visited[index] = false;
findDwarf(index + 1, count, sum);
}
}
이 문제는 이렇게 어렵게 안 풀어도 될 듯하다..
브루트포스 풀이
: 1. 아홉 난쟁이의 키를 다 더한다
2. 앞에서부터 순서대로 2개씩 빼서 100이 되는지 확인한다
3. 다 찾았으면 뺀 2명의 키를 0으로 바꾼다
4. 오름차순으로 정렬한다
5. 0으로 바꾼 2명을 제외하고 출력해야하므로
k는 2부터 시작하여 출력.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] arr = new int[9];
int sum = 0;
for (int i = 0; i < 9; i++) {
arr[i] = Integer.parseInt(br.readLine());
sum += arr[i];
}
for (int i = 0; i < 8; i++) {
for (int j = i+1; j < 9; j++) {
if (sum - arr[i] - arr[j] == 100) {
arr[i] = 0;
arr[j] = 0;
Arrays.sort(arr);
for (int k = 2; k < 9; k++) {
System.out.println(arr[k]);
}
return;
}
}
}
}
}728x90
'코딩테스트 정리(자바)' 카테고리의 다른 글
| 백준 - 두수의 합 (실버 3) (5) | 2024.03.01 |
|---|---|
| 백준 - 숫자 (브론즈 2) (2) | 2024.02.28 |
| 백준 - 입력 받기 (0) | 2024.02.27 |
| 프로그래머스 - 최소직사각형 (Level 1) (0) | 2024.02.27 |
| 프로그래머스 - 프로세스 (Level 2) (0) | 2024.02.26 |