코딩테스트에서 문제를 풀다 보면 논리적 오류나 사소한 실수로 인해 정답을 맞히지 못하는 경우가 많다.

이 때 대부분은 System.out.println() 같은 로그를 찍어 확인하려 하지만, 실전에서는 디버깅(Debugging) 기능을 사용하는 것이 시간 단축과 정확도 측면에서 훨씬 유리하다.

 

1. 디버깅(Debugging)이 필요한 이유

많은 사람들이 코드를 수정할 때 로그를 찍어서 확인한다. 하지만 로그 방식은 다음과 같은 단점이 있다.

 - 시간 소요 : 로그를 찍고, 실행하고, 다시 지우고, 재실행하는 과정이 반복되어 시간이 오래 걸린다.

 - 시야 협소 : 로그를 찍은 특정 부분만 보게 되어, 코드의 전체적인 흐름을 놓치고 지엽적인 부분에만 매몰되기 쉽다.

 

디버깅 기능을 사용하면 변수의 상태 변화를 실시간으로 추적할 수 있어 논리 오류를 빠르게 찾아낼 수 있다.

 

2. IDE 디버깅 기능 활용

Eclipse, Intellij 등 대부분의 IDE는 강력한 디버깅 기능을 제공한다.

 - 중단점(Breakpoint) : 코드의 특정 라인에서 실행을 멈춘다.

 - 변수(Variables) : 현재 시점의 변수 값을 실시간으로 확인한다.

 - 수식(Expression) : 단순 변수 값 뿐만 아니라 arr[i] + arr[i] 와 같이 특정 수식의 결과를 즉시 확인해 볼 수 있다.

 

3. 코딩테스트에서 자주하는 실수 유형

 변수 초기화 오류

현상 : 여러 테스트 케이스를 처리하는 문제에서 이전 케이스의 계산 값이 다음 케이스에 영향을 미쳐 오답 발생

해결 : for문 내에서 반복될 때 누적 변수(sum 등)나 배열이 적절한 시점에 초기화(0 또는 null) 되는 지 확인한다.

 

 반복문 인덱스 범위 오류

현상 : N번 반복해야 하는데 N+1번 반복하거나, 배열의 범위를 벗어나는 경우

체크 : 반복문 조건이 i < N 인지, i <= N 인지 의도한 로직과 정확히 일치하는지 디버깅을 통해 확인한다.

 

 출력 형식 오류

현상 : 문제에서는 숫자만 출력하라고 했는데, 디버깅이나 확인을 위해 넣은 텍스트를 그대로 포함하여 제출하는 경우

주의 : 불필요한 테스트 출력문이 포함되지 않았는지 마지막까지 확인해야 한다.

 

 자료형 범위 오류(Overflow)

현상 : 로직은 완벽한데 답이 틀리거나, 뜬금없이 음수가 출력되는 경우

원인 : int 자료형의 범위(약 21억)를 초과하여 오버플로우가 발생했기 때문이다.

해결 :

 - 답이 음수가 나올 수 없는 로직인데 음수가 나온다면 100% 오버플로우다.

 - 팩토리얼, 순열, 경우의 수 등 값이 급격히 커지는 문제를 처음부터 long 자료형을 사용하는 습관을 들이는 것이 좋다.

 

4 정리

코딩테스트는 시간 싸움이다. 한 번에 완벽하게 코드를 짜면 좋겠지만, 실수가 발생했을 때 얼마나 빨리 수정하느냐가 합격을 좌우한다. 로그를 찍으며 해매기보다는, 디버깅 툴을 익숙하게 다루는 연습을 통해 디버깅 시간을 단축해야 한다.

+ Recent posts