Code/Algorithm

[알고리즘] 논리 오류 탐색 방법, 디버깅

ki1111m2 2023. 9. 21. 15:19

Do it! 알고리즘 코딩 테스트 - 파이썬 편 (김종관) 책을 이용하여 알고리즘 공부 중입니다 😃

https://youtu.be/zX76zhUL7ks?si=yzqvIKobAd-XJRSL 


코드에서 디버깅하고자 하는 줄에 중단점을 설정하고, IDE의 기능을 실행하면 된다.

PyCharm에서는 Variables 기능을 활용하면 변숫값 추적도 가능하다.

 

 

실수하기 쉬운 4가지 오류

  • 변수 초기화 오류

변수 초기화를 제대로 하지 않아 다른 값이 저장되어 있는 경우이다. 이전 테스트 케이스의 결과값이 저장되어 있기도 하다.

모든 변수가 정상적으로 초기화 되고 있는지 디버깅을 이용해 확인하면 문제 해결에 도움이 된다.

 

  • 반복문에서 인덱스 범위 지정 오류

배열은 0 ~ 10,000까지 생성했는데 반복문에서 범위를 0 ~ 1,000까지만 설정한 경우, < 연산자를 써야 하는데 <= 연산자를 사용한 경우 등이 있다.

범위와 시작 인덱스를 꼼꼼히 확인하고, 디버깅을 통해 확인하는 습관을 기르는 것이 좋다.

 

  • 잘못된 변수 사용 오류

출력 부분이나 로직 안에서 사용해야 하는 변수를 다른 변수와 혼동하여 잘못 사용하는 경우이다.

for t in range(1, testcase+1):	# t: 2, testcase: 5
	start, end = map(int, input().split())	# start: 1, end: 10
    
    for i in range(start, end+1):
    	answer = answer + A[i]
        
    print(str(testcase) + " " + str(answer/2))

 

2번 테스트 케이스 경우이므로, 출력에서는 2와 결과값이 나오길 기대한다.

그러나 결과를 보면 5와 결과값이 나올 것이다.

그 이유는 testcase는 5로 확정된 값이고 반목문에서 돌고 있는 변수는 t인데, 출력문에서 t가 아닌 testcase를 출력했기 때문이다.

 

  • 파이썬 자동 형 변환

파이썬에서 나누기는 / 연산자와 // 연산자 두 가지가 존재한다.

보통 다른 언어에서는 몫을 계산하는 연산자로 / 하나만 존재하는데, 파이썬에서는 이를 위해선 // 연산자를 사용해야한다.

  • / 연산자: 나눗셈을 한 결과값을 float 형태로 소수점 결과까지 보여준다.
  • // 연산자: 나눗셈을 한 결과값을 int 형태로 몫만 보여준다.
  • % 연산자: 나눗셈을 한 결과값의 나머지를 보여준다.