백준(JAVA) 풀이/브루트포스 알고리즘

백준(JAVA) 2309번 일곱 난쟁이 풀이

개발윗미 2022. 11. 5. 17:57

Java로 구현한 2309번 일곱 난쟁이 문제 풀이입니다.

 

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net


import java.util.*;

public class Main {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		int[] data = new int[9];
		
		int sum_value = 0;
		for (int i=0; i<9; i++) {
			data[i] = sc.nextInt();
			sum_value += data[i];
		}
		
		Arrays.sort(data);
		int a = 0;
		int b = 0;
		
		boolean flag = true;
		for (int i=0; i<8; i++) {
			for (int j=i+1; j<9; j++) {
				if (sum_value - data[i] - data[j] == 100) {
					a = data[i];
					b = data[j];
					flag = false;
					break;
				}
			}
			
			if (flag == false)
				break;
		}
		
		for (int da : data) {
			if (da == a || da == b)
				continue;
			System.out.println(da);
		}
	}
}

 

1. 입력된 9개의 값들을 data 배열에 정의하고, 각 수를 sum_value에 누적하여 9개 수의 합을 구한다.

 

2. data 배열을 오름차순으로 정렬하고, 제외시킬 두 명의 난쟁이 키를 담을 a와 b를 초기화한다.

 

3. data 배열에서 값을 차례대로 하나씩 타겟으로 잡고, 해당 인덱스 다음 수부터 확인하여 만약 sum_value에서 타겟 data[i]와 data[j]을 뺀 값이 100일 경우 

   a에 data[i]를, b에 data[j]를 할당한 후 이중 for문을 벗어난다.

 

4. data 배열의 값을 하나씩 출력하는데, 만약 그 값이 a이거나 b일 경우 제외시켜야 하므로 continue한다.