일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 앱개발
- node.js
- 자바스크립트
- html
- 리사이클러뷰
- MySQL
- 대전맛집
- 위상정렬
- 타입스크립트
- 프래그먼트
- 어은동맛집
- nodeJS
- 자바
- 후기
- computergraphics
- 우선순위큐
- 카이스트맛집
- 안드로이드스튜디오
- 몰입캠프
- glfw
- BFS
- 프로그래머스
- 궁동
- 컴퓨터그래픽스
- 카이스트
- 분리집합
- DP
- 몰입캠프후기
- 알고리즘
- 백준
- Today
- Total
소근소근
알고리즘(problem solving)에서 틀린 이유. (런타임에러, 컴파일에러, 메모리 초과, 시간 초과, 그냥 틀림) 본문
알고리즘(problem solving)에서 틀린 이유. (런타임에러, 컴파일에러, 메모리 초과, 시간 초과, 그냥 틀림)
JJureng 2021. 12. 22. 20:39한동안 알고리즘에 손을 대지 못하다가 최근 다시 백준을 풀기 시작했다..
백준을 풀다 보면 수많은 런타임 에러, 틀렸습니다, 시간 초과를 보게 된다.
내 코드를 보면서 아니 대체 왜? 맞는데? 예외처리 다 했는데 맞왜틀??!?! 을 정말 많이 외쳤었다.
하지만 컴퓨터는 거짓말을 하지 않지.. 내가 무조건 잘못한게 맞다 ^^
그래서 오랜만에 알고리즘 공부를 하기 전에 알고리즘 풀 때 마주치는 에러에 대해 내가 보기 위해 정리하기로 했다.
1. 컴파일 에러(compile error)
보통 비주얼 스튜디오에서 예제 코드를 돌려보고 내기 때문에 주로 마주치는 에러는 아니다.
코드에 쓴 함수나 자료구조를 사용하기 위해 필요한 헤더를 모두 선언 해 주었는지 확인해보자.
그래서 보통 알고리즘을 풀때 자주 쓰는 헤더를 미리 쳐놓고 시작한다.
자주 쓰는 헤더로는
#include<vector>
#include<algorithm>
#include<string> 등 ...
또 , 함수를 제대로 사용했는지도 체크하자.
예를 들어 최소값을 구하는 min함수의 인자가 3개 이상일 때는 min({}) .. 이렇게 {}을 넣어주자
2. 런타임 에러(runtime error)
- segmentation fault
- 재귀 함수 호출이 너무 깊어진 경우
- 잘못된 메모리 참조
- 배열 범위를 넘어가게 참조하거나 (배열 크기를 넉넉하게 잡고 , 예외가 있는지 확인하자)
- divide by zero
3. 시간 초과
내가 짠 알고리즘이 문제가 원하는 시간 복잡도를 지키지 못했을 때 이다.
예를 들어 O(n) 으로 풀 수 있는 문제인데 O(n^2) 으로 푼 것이다.
이땐 그냥 다른 방법을 생각해서 다시 풀어보자..
연산은 적게 할 수록 좋으니까 ^^
4. 메모리 초과
- 배열 크기가 너무 클 때
- 스택 영역에 함수가 너무 많을때(보통 재귀함수로 호출이 많아졌을 때)
- 자료구조에 너무 많은 데이터가 들어가 있을 때
5. 틀렸습니다
- 내가 짠 코드가 그냥 틀렸다..
- 예외 처리 못한게 있는지 보자. 내가 생각지도 못한 예외가 있을 수도 있다.
- 오버 플로우. (선언한 변수의 타입을 다시 보자. int를 long long으로 바꾼다거나..)