♻️디버깅

dev_itzel_02✨·2025년 4월 15일

♻️Algorithm

목록 보기
11/12
post-thumbnail

프로그램에서 발생하는 문법 오류나 논리 오류를 찾아 바로잡는 과정

코드의 오류는 어떻게 잡을까 ?

  • 문법 오류 ⇒ 컴파일러
  • 논리 오류 ⇒ 로직 step-by-step 검증

[디버깅 중요성]

문법 오류는 컴파일러가 찾아주지만, 논리 오류는 사용자의 의도와 코드의 흐름이 다르게 동작하는 것이므로 형태가 다양하다.

즉, 디버깅을 통해 어떤 흐름으로 동작하는지, 데이터의 상태 변화가 어떤지 등을 직관적으로 확인할 수 있다. 코딩테스트 응시 환경에서는 디버깅이 불가능하기 때문에, 디버깅을 익힌 경험으로 동작의 흐름을 예상할 수 있다.

[디버깅 하는 법]

  • 중단점 = 브레이크 포인트 설정
    • 중단점 여러 개 설정 가능
  • 디버깅 실행
    • 추적할 변숫값 지정 가능 → 변숫값이 의도한 대로 바뀌는지 확인

[Example]

# 배열의 주어진 범위의 합을 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 형으로 출력

(+ % 나머지 값 구하는 연산자)

→ 실제 문제에서 몫은 자연수 값으로 출력을 원하기 때문에 실패로 결정됨

디버깅을 습관화 해놓아야 코딩 테스트 환경에서 디버깅 없이도 데이터의 상태 변화나 흐름을 캐치할 수 있을 것 같다 ..!!!

profile
🐜👣steadiness🐜👣

0개의 댓글