[BJ2309] 일곱 난쟁이
✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/백준 알고리즘

[BJ2309] 일곱 난쟁이

🚩 문제 설명

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

⏱️ 시간 복잡도
▪ O(N^2)

◾ 일곱 난쟁이가 아닌 두 명을 골라내야합니다.

◾ 일곱 난쟁이의 키의 합은 총 100 입니다.

◾ 출력은 오름차순이 되어야 합니다.

 

 

 


 

 

 

입출력

변수 설명
arr: 난쟁이들의 키 배열 (총 9개)
return ➡️ 오름차순으로 일곱 난쟁이의 키를 출력

✔️ 예제 1

20
7
23
19
10
15
25
8
13
7
8
10
13
19
20
23

 

 

 


 

 

 

📑 문제 풀이

with Java

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Arrays;

// 그리디, 브루트 포스 
public class Main {
	static int[] arr = new int[9]; // 난쟁이 키 배열
	static int n1, n2;


	public static void main(String[] args) throws Exception {
		System.setIn(new FileInputStream("input.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int sum = 0;

		// 배열 입력
		for (int i = 0; i < 9; i++) {
			arr[i] = Integer.parseInt(br.readLine());
			sum += arr[i];
		}

		// 배열 정렬
		Arrays.sort(arr);

		// 빼야하는 두 명의 난쟁이를 골라낸다.
		// 두 명을 빼서 만약 100 이라면 해당 idx 를 저장
		for (int i = 0; i < 9; i++) {
			sum -= arr[i];
			for (int j = i + 1; j < 9; j++) {
				sum -= arr[j];
				if (sum == 100) {
					n1 = i;
					n2 = j;
					break;
				}

				sum += arr[j];
			}

			sum += arr[i];
		}

		for (int i = 0; i < 9; i++) {
			if (i == n1 || i == n2) continue;
			System.out.println(arr[i]);
		}

	} // end main
} // end class

💬 Point

➡️  일곱 난쟁이의 키의 합은 100
➡️  반복문을 돌면서 키의 합이 100인지 살펴본다.

 

 

 

 

 

 

 

 

 

 

 

 

# 백준 일곱난쟁이 java # Bj 2309 java


 

728x90