2015. 6. 4. 08:41ㆍ알고리즘 문제풀기
답을 제출하고, 채점 결과를 보았고, 틀렸다.
컴파일을 했고, 컴파일이 안 되었다.
예제 데이터에서 답이 제대로 나오지 않는다.
무한 루프를 돈다.
런타임 에러가 난다.
왜일까?
1) 소스의 오류
: 소스에 허점이 있다.
전체적인 구조와 논리, 설계는 옳은 방향이나 그 구현이 잘못된 것이다.
- 변수명을 확인하자. i, j, k가 섞였는가? 모든 변수 사용 하나 하나를 면밀히 관찰하자. 그 위치에서 사용해야 할 변수가 그것이 맞는가? 그 변수가 거기서 어떤 값을 가지는가? 처음에 세운 논리에 부합하는가? 함수 이름도 다시 한 번 확인하자.
- Overflow에 유의하자. 중간에 signed 32-bit를 넘어가는 값(약 21억, 2 뒤에 0이 9개)은 없는가? 곱하기는 long long으로 캐스팅하자. 모든 곱셈과 덧셈을 다시 보자. 나머지를 계산하는 문제에서 뺄셈을 쓰면 안 된다. a-b === a+(m-b)임을 기억하자. GCD로 나누거나 나머지를 취하는 방법은 없는가?
- for( ㅁㅁ; ㅁㅁ; ㅁㅁ); << 이런 부분은 없는가?
- 비교 연산을 주의하자. ==과 =을 헷갈리지 않았는가?
- 재귀함수 내부에서 전역변수의 값을 바꾼다면 주의하자. 전역변수 a가 2이지만, 재귀 호출 이후 10으로 바뀔 수도 있다. 원래 값이 필요하다면 저장하자.
- 메모리가 부족하지 않은가? 재귀 함수를 너무 많이 호출하지 말아야 한다.
- 배열 참조를 모두 다시 한 번 확인하자. [] 안에 들어있는 값은 항상 배열 범위 내일까? 혹시 20까지 참조하는데 [20]으로 잡지는 않았는가? (이것 때문에 고생한 경험이 많음에도 불구하고 몇 주 전 이것 때문에 2시간 정도를 보냈다...)
2) 논리의 오류
: 소스의 오류와도 관련이 있다. 논리적으로 옳지 않은 솔루션인 경우이다. 이건 어쩔 수 없다. 생각한 솔루션을 정확하게 구현했음에도 불구하고 WA 등이 나온다면 완전히 틀려서인 경우이다. 가장 잡기 힘든 오류인데, 일반적으로 이 솔루션이 맞다고 가정하거나 추측하거나 (잘못되게) 증명한 경우 코딩을 시작하기 때문이다. 대회 중에는 WA를 봐도 이게 내 솔루션이 잘못된건지 코딩에서 실수한 건지 알 수 없기 때문에 생각을 명확히 하는 것이 중요하다.
'알고리즘 문제풀기' 카테고리의 다른 글
나는 코더다 2017년 선발고사 대비 2차 모의고사 풀이 (1) | 2017.01.02 |
---|---|
클라우드 서비스 정리 (0) | 2015.03.29 |
기본적인 ffmpeg 사용법 (1) | 2015.02.15 |