알고리즘
[백준] 문제 2309번 : 일곱난쟁이 - JAVA
DoosanBaek
2024. 12. 5. 16:16
[링크] : https://www.acmicpc.net/problem/2309
💎 문제 분석 & 제약 조건
문제 분석 :
아홉 난쟁이의 키가 주어졌을 때, 키의 합이 100이 되는 일곱 난쟁이를 찾기
- > 주어진 난쟁이들의 키를 입력받아 합이 100이 되는 일곱 난쟁이를 찾아서 그들의 키를 오름차순으로 출력
제약 조건 :
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
🚀 의사 결정
1. Scanner를 사용하여 아홉 난쟁이의 키를 입력받고, 합을 계산
2. Arrays.sort()를 사용하여 난쟁이들의 키를 오름차순으로 정렬
3. 이중 for문을 사용하여 두 난쟁이를 선택하고, 이들을 제외한 키의 합이 100이 되는지를 확인
4, 합이 100이 되는 두 난쟁이를 찾으면 exclude1과 exclude2에 그 인덱스를 저장
📜 소스코드(Java)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] heights = new int[9]; // 아홉 난쟁이의 키를 저장할 배열
int sum = 0; // 아홉 난쟁이의 키의 합을 저장할 변수
// 아홉 난쟁이의 키 입력받기
for (int i = 0; i < 9; i++) {
heights[i] = sc.nextInt();
sum += heights[i]; // 키의 합 계산
}
// 난쟁이들의 키를 오름차순으로 정렬
Arrays.sort(heights);
int exclude1 = -1, exclude2 = -1; // 제외할 두 난쟁이의 인덱스를 저장할 변수
// 합이 100이 되도록 두 난쟁이를 찾기
for (int i = 0; i < 9; i++) {
for (int j = i + 1; j < 9; j++) {
// 두 난쟁이의 키를 뺀 합이 100인 경우 찾기
if (sum - heights[i] - heights[j] == 100) {
exclude1 = i; // 첫 번째 제외할 난쟁이의 인덱스 저장
exclude2 = j; // 두 번째 제외할 난쟁이의 인덱스 저장
break;
}
}
if (exclude1 != -1) break; // 두 난쟁이를 찾았으면 더 이상 반복할 필요 없음
}
// 결과를 출력
for (int i = 0; i < 9; i++) {
if (i != exclude1 && i != exclude2) {
System.out.println(heights[i]); // 제외할 두 난쟁이를 제외하고 출력
}
}
}
}