반응형
문제
문제 탐색하기
1. 일곱 난쟁이 키의 합은 100
문제를 확인해보면 9명의 난쟁이의 키를 input 값으로 받는 것을 알 수 있습니다. input 값이 많지 않으므로 정답을 도출하는 데에 전체 탐색을 해도 괜찮을 것 같다는 생각을 했습니다.
9명의 난쟁이 중 7명의 난쟁이 키의 합이 100일때의 난쟁이들의 키를 배열로 출력하면 되는데,
9명의 난쟁이에서 백설공주의 난쟁이가 아닌 2명을 제외시키는 것이 더 수월할 것으로 판단되었습니다.
2. 9명의 난쟁이 키의 합 구하기
7명의 난쟁이의 키를 구하기 위해서는 9명의 난쟁이 키의 합에서 2명의 난쟁이를 제외시켜 100이 나오는 경우를 구해야합니다. 즉 9명의 난쟁이 키의 합이 필요합니다. 따라서 값을 처음 입력받을 때 9명의 난쟁이 키 총합을 구하면 편리할 것으로 생각되었습니다.
3. 난쟁이 키를 오름차순으로 정렬하기
입력값을 배열에 저장해서 오름차순으로 정렬해서 문제 풀이를 시작하면 추후에 정렬하는 것보다 편리합니다.
java는 보편적으로 배열을 정렬할때 Arrays.sort(배열), 즉 sort() 함수를 통해서 배열을 쉽게 오름차순으로 정렬시킬 수 있으니 이를 활용하여 문제 풀이를 진행할 것입니다.
Arrays.sort() 함수는 N개의 원소를 정렬할 때 평균 O(nlog(n)) 의 시간복잡도를 가지고 최악의 경우 O(n^2)의 시간복잡도를 가지지만 N의 값이 크지 않기때문에 사용해도 될 것이라고 생각합니다.
따라서 정렬 및 전체탐색을 이용하여 문제를 접근하도록 하겠습니다.
코드 설계하기
- 배열을 입력받습니다.
- 9명의 난쟁이 키의 합을 변수에 저장합니다.
- 입력받은 배열을 오름차순으로 정렬합니다.
- 9명의 난쟁이 중 2명을 선택하는 로직을 작성합니다.
- 제외할 2명이 정해지면 나머지 난쟁이의 키를 출력하는 함수를 생성합니다.
정답 코드
import java.io.*;
import java.util.Arrays;
public class SevenDwarfs {
public static void main(String[] args) throws IOException {
// 1. 배열을 입력 받는다.
int[] arr = new int[9];
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int sum = 0;
for(int i=0; i<arr.length; i++){
arr[i] = Integer.parseInt(reader.readLine());
// 2. 9명의 난쟁이 키의 합
sum+=arr[i];
}
// 3. 배열을 오름차순으로 정렬
Arrays.sort(arr);
// 4. 9명 난쟁이 중, 2명을 제외하는 경우의 수
boolean chk = false;
for(int i=0; i<arr.length; i++){
for(int j=i; j<arr.length; j++){
if(chk) break;
if(sum-(arr[i]+arr[j]) == 100){
chk = true;
printResult(arr, arr[i], arr[j]);
}
}
}
}
// #. 7 난쟁이의 키를 출력하는 함수
private static void printResult(int[] arr, int height1, int height2) {
for(int k = 0; k<arr.length; k++){
if(arr[k] == height1 || arr[k] == height2){
continue;
}
System.out.println(arr[k]);
}
}
}
반응형
'코딩테스트 챌린지' 카테고리의 다른 글
[코딩테스트 챌린지] 백준 1568 덩치 (java) (0) | 2024.09.15 |
---|---|
[코딩테스트 챌린지] 백준 2947 나무조각 (java) (1) | 2024.09.14 |
[코딩테스트 챌린지] 백준 25305 커트라인 (java) (0) | 2024.09.13 |
[코딩테스트 챌린지] 백준 1181 단어 정렬 (java) (0) | 2024.09.11 |
[코딩테스트 챌린지] 백준 10814 나이순 정렬 (java) (0) | 2024.09.10 |