배움에는 끝이 없다던데 끝이라고 생각했던(?) 부분에서도 배움을 얻을 줄이야..;;
나에게 이러한 교훈을 준 문제 링크부터..
https://www.acmicpc.net/problem/2309
난쟁이 7명의 total 키(height) = 100에 성립하는 모든 경우의 수를 구하는 방식으로 코드를 짰다.
import java.util.*;
public class BJ_b1_2309 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] t = new int[9];
List<Integer> re = new ArrayList<>();
for (int i = 0; i < 9; i++) t[i] = sc.nextInt();
for(int i=0; i<9-1; i++) {
for(int j=i+1; j<9; j++) {
int sum = 0;
for(int k=0; k<9; k++) {
if(t[k] == t[i] || t[k] == t[j]) continue;
sum += t[k];
re.add(t[k]);
}
if(sum != 100) re.clear();
else {
Collections.sort(re);
i = 7;
break;
}
}
}
for (Integer i : re) {
System.out.println(i);
}
}
}
그리고 다행히(?) 통과했다.
다르게 생각해보면 '총 9명의 난쟁이 중, 2명만 빼면 되는데, 굳이 7명에만 집착할 필요가 있을까?' 싶었다.
그래서 다시 코드를 짜서 제출했다.
전자의 경우, 2개를 빼고 더한 모든 경우에서 total == 100이 성립하면 반복문을 빠져나오도록 구현했다.
이것보다 9명 다 더한 키 - 2명의 키 == 100인 경우를 발견하면 반복문을 빠져나오는 게 더 간단한 것 같다.
public class BJ_b1_2309 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] t = new int[9];
int sum = 0;
for (int i = 0; i < 9; i++) {
t[i] = sc.nextInt();
sum += t[i];
}
for(int i=0; i<9-1; i++) {
for (int j=i+1; j<9; j++) {
if(sum - t[i] - t[j] == 100) {
t[i] = t[j] = 0;
Arrays.sort(t);
for (int k = 2; k < 9; k++) System.out.println(t[k]);
return;
}
}
}
}
}
큰 차이는 없지만..ㅎ
그래도 문제에 다른 관점으로 접근했다는 것에 기분이 좋아지는 것을 느꼈다 (●'◡'●)
같은 문제도 다른 관점으로 바라볼 수도 있다는 것을 이 문제를 통해 다시 한번 느낄 수 있었다!
누군가에겐 단순히 브론즈 문제 하나 해결한 걸지라도 일단 나에겐 아주아주 좋은 경험이 됐다.
오늘 같은 경험을 반복하여 주어진 것에 다방면으로 접근할 수 있는 만능형(?)이 되어야겠다 허허😁