해결된 질문
작성
·
55
답변 1
1
안녕하세요, Taejin Kim님!
결론부터 말씀드리자면, 백준에서 틀린 문제에 대해 어떤 테스트케이스가 틀렸는지 알 수 있는 방법은 존재하지 않습니다. 그러한 이유는 문제의 테스트케이스 또한 문제를 만든 저작자의 저작물이기 때문에 공개를 하지 않는 것이라고 생각하면 될 것 같습니다.
물론, 틀린 테스트케이스를 알 수 없으니 공부하기 힘들다고 느낄 수 있을 거라고 생각합니다.
저 또한 처음 문제를 풀 때는 틀린 테스트케이스를 알 수 없으니 내 풀이 자체가 틀렸는지
또는 풀이는 맞지만 미처 고려하지 못한 경우가 있는지
등 채점이 틀린 정확한 이유를 파악하기 어려웠습니다.
하지만, 이러한 상황 속에서 틀린 이유를 찾는 연습을 해야 한다는 말씀을 드리고 싶습니다.
왜냐하면, 코딩테스트나 대회 문제를 풀 때의 환경 또한 어떤 테스트케이스를 틀렸는지를 알려주지는 않기 때문입니다. 실제로, 코딩테스트에서 내 풀이가 틀렸는데 그러한 부분을 찾는 연습이 잘 되어 있지 않다면 한 문제에 1-2시간 동안 묶여 좋은 성적을 얻지 못할 수도 있습니다. (실제로 빈번히 일어나는 현상입니다.)
그래서, 자신의 코드의 틀린 부분을 찾는 팁들을 조금이나마 드리겠습니다.
틀린 이유는 크게 2가지로 분류될 수 있습니다 첫 번째는 풀이의 로직 자체가 틀린 경우
이고, 두 번째는 구현 과정에서 고려하지 못한 경우나 잘못 구현한 경우
에 해당합니다.
제출을 했는데 틀렸다면, 풀이의 로직 자체가 틀린 경우
일 수도 있으니 다시 한번 풀이가 맞는지 확인하는 과정이 필요합니다. 확인했는데 풀이의 로직은 맞는 것 같다면 구현 과정에서 실수를 한 것일 확률이 높습니다.
사실, 풀이의 로직이 맞는지 틀린지 여부는 제출하기 전이 아닌, 코드를 구현하기 전에 최대한 검증을 해야 합니다.
풀이의 로직이 맞다면, 구현 과정에서 고려하지 못한 경우나 잘못 구현한 경우
에 해당하는데요.
따라서, 내가 설계한 풀이(아이디어)를 코드로 잘 구현했는지 살펴보고 틀린 부분이 없는지 확인합니다. 특히, 엣지 케이스를 확인하는 것이 좋은데요. 엣지 케이스라는 것은 끝에 해당하는 케이스를 의미합니다. 예를 들어, 문제에서 주어지는 범위가 0부터 10000까지라고 한다면, 0인 경우에 내 코드가 잘 돌아가는지, 10000인 경우에 내 코드가 잘 돌아가는지 등을 파악하는 것이죠. 또한 내 코드에 여러 가지 경우를 처리하는 로직이 포함되어 있다면 (여러 개의 if 문을 의미), 각 경우를 잘 처리하는지 실제로 코드로도 잘 돌아가는지 확인해 보는 것입니다.
그리고, 가끔은 ==
을 써야 하는데, =
을 쓴다거나 하는 실수를 하니 코드를 전체적으로 훑어보며 문법적으로 어색한 부분이 있는지 찾아보는 것 또한 좋습니다.
[정리]
제 나름대로 팁들을 적어보았는데요. 이러한 팁들을 가지고 틀린 문제에 대해 어떤 부분 때문에 틀렸는지를 연습해 보는 것을 추천합니다. 결론적으로 가장 중요한 것은 자신이 틀린 부분은 자신이 잘 찾아야 하기 때문입니다. 그렇기에, 자신이 자주 실수하는 부분은 정리를 한다던가 하는 과정을 거치면 좀 더 틀린 부분을 찾는 시간이 단축될 거라고 생각합니다.
어쨌든 핵심은!! 코드의 로직을 훑어보며, (문제의 예시에 나온 것이 아닌) 여러 입력값들을 직접 넣어보며 틀린 부분을 찾는 연습을 하는 것만이 틀린 부분을 찾는 실력을 높여줄 것입니다.
당연히 처음에는 시간이 오래 걸리고 힘들겠지만, 틀린 부분을 잘 찾는 것 또한 매우 중요한 능력이고 실력이기 때문에, 틀린 부분을 찾는 과정 또한 문제를 푸는 과정이라고 생각해 주시면 좋을 것 같습니다.
또 궁금하신 점 있으면 질문해 주세요. :)
와...너무 좋은 답변 감사드립니다! 저는 '구현 과정에서 고려하지 못한 경우나 잘못 구현한 경우' 가 훨씬 많았다는 걸 깨닫게 되었어요! 알려주신대로 제가 어떤 부분에서 자주 실수하는지 정리해보도록 하겠습니다! 넘 감사드립니다 ㅎㅎ