안녕하세요! 모두들 즐거운 한 주 보내고 계신가요??
오늘도 찾아온 '오늘의 알고리즘' 시간입니다!!
최근에 네이버 코딩테스트를 봤었는데요....
아............역시 네이버는 네이버였습니다..........
물론 제가 준비가 부족했던 것도 있었지만
제가 기존에 공부했던 알고리즘 난이도와는 차원이 다른 난이도였습니다.....ㅜ.ㅜ
무울론 좋은 결과가 있다면 정말 좋겠지만
설령 결과가 좋지 않더라도 이번 코테를 통해서
제가 어떠한 식으로 코테를 준비를 할 지 공부에 대한 방향성을 알 수 있었다고 생각해야죠 ㅋㅋ
이번에도 잡소리가 길어졌네요 ㅋㅋㅋㅋ
본격적으로 오늘의 알고리즘 문제 시작합니다!!
문제
처음에 문제를 읽어보고 '어디서 많이 본 문제인데?!' 라는 생각을 했습니다.
자세히 보니 난쟁이 이야기가 나오는 것에서
저번에 풀었던 '백설공주와 일곱 난쟁이' 문제인줄 알았습니다!!
'아, 뭐 이것도 저번에 풀었던 것처럼 똑같이 풀면 되겠지 라는 생각을 했었는데
.
.
.
.
풀이 과정을 보면은 전혀 그렇지가 않았다는 생각이 드실겁니다.....
'하나의 문장'을 이해 못한 나머지 시간이 너무 오래 걸렸습니다 ㅜ.ㅜ
풀이
제가 문제 설명 과정에서 '왜 저런 이야기를 했냐??' 라는 생각이 드실 수도 있으실건데요...
사실 정말로 문제를 해석하는 과정은 저번 문제랑 다를게 없습니다!
9명의 키를 입력 받아서 그 키의 총 합과 i번째와 j번째를 계속 빼면서
100이 되면 그 수를 제외 해버리면 된다는게 처음 생각이었습니다.
아마 저 말고도 다른 분들도 분명히 처음에는 그렇게 생각 하실 수도 있다는 생각이 듭니다...
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class algo3040 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] Dwarf = new int[9];
int Sum = 0;
for (int i = 0; i < Dwarf.length; i++) {
Dwarf[i] = Integer.parseInt(br.readLine());
Sum += Dwarf[i];
}
for (int i = 0; i < Dwarf.length; i++) {
for (int j = i + 1; j < Dwarf.length; j++) {
if (Sum - Dwarf[i] - Dwarf[j] == 100) {
Dwarf[i] = -1;
Dwarf[j] = -1;
}
}
}
for (int i = 0; i < Dwarf.length; i++) {
if (Dwarf[i] != -1) {
System.out.println(Dwarf[i]);
}
}
br.close();
}
}
그런 의미에서 저번과 같은 코드를 긁어서 '혹시나..........?' 하는 마음에 제출을 해봤습니다.
.
.
.
.
그런데..........
제가 순간 헛것을 봤나 싶었습니다.....
분명히 입력과 출력도 예제대로 정확히 입력하고 제대로 됬는데
왜째서 틀린건지 처음에는 이해를 하지 못했습니다.
그래서 아예 처음부터 문제를 다시 읽어봤고
그러던 와중에 제가 읽지 않고 그냥 넘겼었던 한 줄이 있었습니다!!
...............네 그렇습니다
사실 저 부분만 제대로 봤었으면 최초에 배열의 인덱스 비교 과정에서 맨처음 답이 나오면은
그 부분에서 break를 걸어버렸으면 되는 것이었는데
break가 없으니 for문 때문에 배열의 인덱스를 찾으면서 0으로 초기화 해버리니
입출력이 제대로 나와도 틀렸다고 하는 것이었던 거죠........
오늘도 제대로 바보짓을 해버린 것을 스스로 인증 해버린 셈입니다........아이고 억울해라.....ㅜ.ㅜ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Algo2309 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] Dwarf = new int[9];
int Sum = 0;
boolean check = false;
for (int i = 0; i < Dwarf.length; i++) {
Dwarf[i] = Integer.parseInt(br.readLine());
Sum += Dwarf[i];
}
for (int i = 0; i < Dwarf.length; i++) {
for (int j = 0; j < Dwarf.length; j++) {
if (check)
break;
if (i == j)
continue;
if (Sum - Dwarf[i] - Dwarf[j] == 100) {
Dwarf[i] = -1;
Dwarf[j] = -1;
check=true;
break;
}
}
}
Arrays.sort(Dwarf);
for (int i = 0; i < Dwarf.length; i++) {
if (Dwarf[i] != -1) {
System.out.println(Dwarf[i]);
}
}
}
}
이전 문제에서 달라진 부분이라고 한다면은
배열의 i번째 인덱스와 j번째 인덱스가 같을 경우에는 for문을 계속 시키면서
바로 밑에 있는 if문을 실행 하는 것입니다.
그리고 if문에서 합과 i번째 인덱스와 j번째 인덱스를 계속 빼 버리면서 그 값이 100 되어버리면
그 두가지의 값을 -1로 바꿔 버리고 break를 걸어서 더이상 if문이 동작하지 않게 하는 것만 달라졌습니다!
사실상 boolean을 이용해서 조건문 비교와 break만 썼어도 금방 끝날 수 있는 간단한 문제였습니다...
진작에 끝냈어야 할 문제를 한문장 못 읽어서 이런 사단이 나버렸네요 아이고 이 바보야.........ㅜ.ㅜ
문제를 제대로 읽어야 한다는 것을 다시 한번 깨달으면서
오늘의 알고리즘을 마칩니다...........흑............
'오늘의 코드 > 진욱찌' 카테고리의 다른 글
오늘의 알고리즘([백준]3040번: 백설 공주와 일곱 난쟁이) (0) | 2021.04.21 |
---|---|
04.15 오늘의 알고리즘 문제(1158: 요세푸스 문제) (0) | 2021.04.15 |
04.06 오늘의 알고리즘 문제(1874: 스택 수열) (0) | 2021.04.06 |
04.05 오늘의 알고리즘 문제(9093: 단어 뒤집기) (0) | 2021.04.05 |
댓글