
프로그램에서 발생하는 문법 오류나 논리 오류를 찾아 바로잡는 과정
문법 오류는 컴파일러가 찾아주지만, 논리 오류는 사용자의 의도와 코드의 흐름이 다르게 동작하는 것이므로 형태가 다양하다.
즉, 디버깅을 통해 어떤 흐름으로 동작하는지, 데이터의 상태 변화가 어떤지 등을 직관적으로 확인할 수 있다. 코딩테스트 응시 환경에서는 디버깅이 불가능하기 때문에, 디버깅을 익힌 경험으로 동작의 흐름을 예상할 수 있다.
# 배열의 주어진 범위의 합을 2로 나눈 몫을 구하시오.
import random
testcase = int(input())
answer = 0
A = [0] * (100001)
for i in range(0, 10001):
A[i] = random.randrange(1, 101)
for t in range(1, testcase+1):
start, end = map(int, input().split())
for i in range(start, end + 1):
answer = answer + A[i]
print(str(testcase) + " " + str(answer/2))
[오류 1. 변수 초기화]
answer 에는 주어진 범위에 해당하는 값들의 합만 더해져야 한다.
for i in range(start, end + 1):
answer = answer + A[i]
디버깅 시, 해당 for 문에서 answer 값이 이전의 수식 결과에 누적되어 더해지는 것을 발견했다.
⇒ answer 값 초기화 로직 추가해야 함
[오류 2. 반복문에서 인덱스 범위 지정]
A = [0] * (100001)
for i in range(0, 10001):
A[i] = random.randrange(1, 101)
배열의 크기는 100001 만큼 할당했는데, 반복문의 범위를 10001 로 지정함.
⇒ 반복문 범위 수정 필요 0 하나 빠트림
[오류 3. 잘못된 변수 사용]
print(str(testcase) + " " + str(answer/2))
출력문에서 몇 번째 테스트인지 횟수를 출력하고 싶었으나, 반복문의 변수인 t 가 아닌 testcase 변수로 잘못 사용함.
[오류 4. 파이썬 자동 형 변환]
str(answer/2))
/ 나누기 연산자 사용 시, float 형으로 출력
// 몫 구하는 연산자 사용 시, int 형으로 출력
(+ % 나머지 값 구하는 연산자)
→ 실제 문제에서 몫은 자연수 값으로 출력을 원하기 때문에 실패로 결정됨
디버깅을 습관화 해놓아야 코딩 테스트 환경에서 디버깅 없이도 데이터의 상태 변화나 흐름을 캐치할 수 있을 것 같다 ..!!!