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


[전체 코드]
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] num = new int[9]; //9명의 난쟁이 키를 입력받을 배열
int spyA = 0, spyB = 0; //스파이 난쟁이 인덱스를 넣어줄 변수
int sum = 0;
for(int i=0;i<num.length;i++) { //난쟁이 키 입력
num[i] = sc.nextInt();
sum += num[i]; //입력받은 키 합산
}
Arrays.sort(num); //출력은 정렬된 배열이기때문에 정렬
for(int i=0;i<num.length-1;i++) { //브루프포스 탐색법
for(int j=i+1;j<num.length;j++) {
if(sum - num[i] - num[j] == 100) { //합계에서 스파이 두명을 뺸 값이 100이면
spyA = i; //인덱스를 넣어준다.
spyB = j;
break;
}
}
}
for(int i=0;i<num.length;i++) {
if(i == spyA || i == spyB) { //스파이가 있는 인덱스
continue; //건너뛰기
}
System.out.println(num[i]);
}
}
}
[제출 결과]

일곱난쟁이 문제는 도저히 풀 방법이 떠오르지 않아 킵해놓았다가 블랙잭 문제를 맞닥뜨리고 굉장히 유사하다고 생각해서 다시 일곱난쟁이로 돌아와 구글링을 통해 답을 얻었다.
그 해답은 바로 알고리즘 기법 중 하나인 부르트포스 탐색법이다.
Brute (짐승적인, 야만한, 난폭한) / Force (힘) = 뜻은 야만적인 난폭한 느낌의 힘이라는 뜻인데 알고리즘 기법에 이 뜻이 드러난다. 부르트포스 알고리즘기법은 하나하나 모든 경우의 수를 탐색하면서 정답을 찾아내는 기법이다.
따라서 어떻게보면 굉장히 무식한 방법이지만 오로지 부르트포스로만 풀리는 문제가 있기에 알고있어야 하는 알고리즘 기법이다.
'Programming > Algorithm(ACM Problems)' 카테고리의 다른 글
| [백준] 1834번 : 나머지와 몫이 같은수 / [자바] JAVA / 학습기록 (0) | 2022.02.01 |
|---|---|
| [백준] 2789번 : 유학금지 / [자바] JAVA / 학습기록 (0) | 2022.01.21 |
| [백준] 2576번 : 홀수 / [자바] JAVA / 학습기록 (0) | 2022.01.20 |
| [백준] 2490번 : 윷놀이 / [자바] JAVA / 학습기록 (0) | 2022.01.20 |
| [백준] 2484번 : 주사위 네개 / [자바] JAVA / 학습기록 (0) | 2022.01.20 |