728x90
[백준] 2309번 - 일곱 난쟁이 (!) (JAVA)
[접근 방법]
브루트포스 알고리즘 방식으로 모든 경우의 수를 고려해야 한다.
9명의 난쟁이 키의 합 중 2명의 키를 뺀 값이 100 인 경우를 찾아야 한다.
9개중 2개를 선택하여 빼는 모든 경우를 구현하고, 남은 7개의 합이 100이 되는 순간의 7개의 값을 정렬한 후 출력한다.
[JAVA 코드]
// 2309번 - 일곱 난쟁이
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
// 0. 입출력 선언 / 초기화
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int[] arr = new int[9];
int sum = 0;
for(int i=0; i<9; i++){
arr[i] = Integer.parseInt(br.readLine());
sum += arr[i];
}
Arrays.sort(arr);
// 1. 9명의 키의 합 중 2명의 키를 뺀 합이 100인 경우 찾기 + 2개의 값 삭제
for(int i=0; i<8; i++){
for(int j=i+1; j<9; j++){
if (sum - arr[i] - arr[j] == 100){
arr[i] = 0;
arr[j] = 0;
// 2. 정렬 + 출력
Arrays.sort(arr);
for(int k=2; k<9; k++){
bw.write(arr[k] + "\n");
}
bw.flush();
bw.close();
br.close();
return; // main 함수를 곧바로 종료
}
}
}
}
}
[Rewind]
1. 어려웠던 점
- "9개 중 2개를 뺀 값이 100이 되는 경우" 를 생각해내지 못하였다.
2. 알게된 점
// 1. 9명의 키의 합 중 2명의 키를 뺀 합이 100인 경우 찾기 + 2개의 값 삭제
for(int i=0; i<8; i++){
for(int j=i+1; j<9; j++){
if (sum - arr[i] - arr[j] == 100){
arr[i] = 0;
arr[j] = 0;
break;
}
}
}
// 2. 정렬 + 출력
Arrays.sort(arr);
for(int i=2; i<9; i++){
bw.write(arr[i] + "\n");
}
bw.flush();
bw.close();
br.close();
}
}
처음은 위와 같이 코드를 작성하였으나, 2중첩 for문의 가장 안쪽에서 break를 실행하면, 한개의 for문만 실행 중지 된다.
따라서 "sum - arr[i] - arr[j] == 100" 이 되는 순간 arr를 출력하고 프로그램이 종료되어야 한다.
if문을 만족한다면, 즉시 arr를 출력하고 return을 통해 main 실행 함수를 종료한다.
// 1. 9명의 키의 합 중 2명의 키를 뺀 합이 100인 경우 찾기 + 2개의 값 삭제
for(int i=0; i<8; i++){
for(int j=i+1; j<9; j++){
if (sum - arr[i] - arr[j] == 100){
arr[i] = 0;
arr[j] = 0;
// 2. 정렬 + 출력
Arrays.sort(arr);
for(int k=2; k<9; k++){
bw.write(arr[k] + "\n");
}
bw.flush();
bw.close();
br.close();
return; // main 함수를 곧바로 종료
}
}
}
3. 개선 방향
- 비슷한 문제를 여러개 풀어야 한다.
728x90
'백준 > 코드 플러스 (알고리즘 기초 - 2) (완)' 카테고리의 다른 글
[백준] 14500번 - 테크로미노 (★) (JAVA) (0) | 2023.02.12 |
---|---|
[백준] 6064번 - 카잉 달력 (!) (JAVA) (0) | 2023.02.12 |
[백준] 1748번 - 수 이어 쓰기 1 (!) (JAVA) (0) | 2023.02.11 |
[백준] 1476번 - 날짜 계산 (JAVA) (0) | 2023.02.09 |
[백준] 3085번 - 사탕 게임 (!) (JAVA) (0) | 2023.02.09 |