Nnnnnnnnn
알고리즘 주의할 점 본문
산술 오버플로우
계산 과정에서 변수의 표현 범위 값 벗어나지 않도록 주의.
결과 값이 너무 크거나, 중간 연산되는 값이 커 비트를 초과한 경우 해당 비트 범위 값만 취해서 결과가 달라질 수 있음.
배열 범위 밖 원소 접근
Off-by-one 오류
하나가 모자라거나 하나가 많아서 틀리는 코드의 오류들.
스택 오버플로우
프로그램의 실행 중 콜 스택이 오버플로우하여 프로그램이 강제 종료됨.
스택 오버플로우는 대개 재귀 호출의 깊이가 너무 깊어져서 옴. C++의 경우 지역 변수로 선언한 배열이나 클래스 인스턴스가 기본적으로 스택 메모리를 사용하기 때문에 특히나 스택 오버플로우를 조심해야 함.
연산자 우선 순위 주의
if(a & 1 == 0) 일 때, & 연산자는 == 보다 우선순위가 낮음.
디버깅
1. 작은 입력에 대해 제대로 실행되나 확인하기 : 오동작하는 가장 작은 입력을 먼저 찾아내기.
2. 단정문 쓰기 : 주어진 조건이 거짓일 때 오류를 내고 프로그램을 강제 종료시키는 함수 또는 구문.
3. 프로그램의 계산 중간 결과를 출력 : 프로그램이 실행되는 중간 과정 값들을 출력하고 예상하는 바와 맞는지를 검사.