728x90
반응형
디버깅이란?
- 코드의 논리 오류를 잡을때 사용하는 방법중 하나로 가장 뛰어난 오류 탐색법이라고 할 수 있다.
디버깅이 중요한 이유
- log로 찍어보는것보다 훨씬 빠르고 간편하다.
코딩테스트 오답 예
- index 범위 1차이로 인한 오답
- int -> long 변환 - 정수 타입의 범위로 인한 오답
★ 디버깅 하는 법
- 1. 코드에서 디버깅 하고자 하는 줄에 중단점(break point)을 설정한다.
- 2. IDE 디버깅 기능을 실행한다.
(이때 여러개의 중단점 설정이 가능하다.)
디버그 기능
- Step Over : 해당 Point에서 다음 라인으로 한줄 씩 이동
- Step Into : 해당 Point에서 메소드 호출 시 해당 메소드 내부를 1줄씩 탐색
- Resume : 다음 Point로 건너 뛴다
(예를들어 point가 for문이면 다음라인으로 넘어가지않고 증감식을 증가시킨 다음 증가된 차수가 실행된다.) - variables : 해당 Point 이전값들과 Over로 인해 위치해있는 line에 존재하는 변수의 값들을 확인할 수 있으며
해당 변수의 값을 수정해서 테스트 케이스를 변경할 수 있다.
LOG보다 DEBUGGING이 더 나은 경우
일반적으로 log는 debug보다 오래 걸린다.
한번에 맞추지 못하고 고쳐야 하는 경우: 이 경우 정답으로 고칠수 있느냐 없느냐는 시간싸움이다
사람 심리상 문제의 결과가 오답으로 나올 경우 지엽적으로 숲이 아닌 나무만 보게 된다.
즉, 미궁에 빠지게 된다. (빠질 수 밖에 없음...)
그래서 오류가 났을 때 LOG를 찍게되면 보통 최종 결과 라인에서 가장 가까운 라인부터 차례대로 확장해 나가면서 찍어봐야 하므로 그 기회비용이 커진다.
반면 디버그는 전체를 스캔한다.
오류 상황 예
- 변수 초기화 오류 : loop의 외부/내부 즉, 라인 한끝차이로 Global/Local로 인한 변수 초기화 오류
- loop조건 범위 오류 : 정답이 (i=0; i<n; i++) 의 범위이지만 i의 범위가 i<=n, i<n-1혹은 i>n등 범위 비교를 잘못한경우
- 자료형의 범위 오류 : Math.random() * Integer.MAX_VALUE
Integer의 최대값 만큼 곱한 랜덤값 끼리 더할 경우 Int가 표현할 수 있는 최대값의 범위를 넘어가면 해당 정수는 음수가 된다.
문제에서 '~만족하는 정수를 구하세요' 라고 주워질 때 long타입으로 바꾸는 등의 처리를 해줘야 한다.- 음수 대표 오류 종류
- 팩토리얼
- 경우의수
- 순열
- DP
- 음수 대표 오류 종류
728x90
반응형
'자료구조 알고리즘 코딩테스트 문제풀이 > 알고리즘 - Do it' 카테고리의 다른 글
[정렬 알고리즘] - 삽입 정렬 O(n²) (1) | 2023.12.11 |
---|---|
[정렬 알고리즘] - 선택정렬 O(n²) (0) | 2023.12.11 |
[정렬 알고리즘] - 버블정렬 O(n²) (0) | 2023.12.11 |
알고리즘 구간 합 (1) | 2023.12.07 |
시간복잡도 이론 (0) | 2023.12.05 |