기술면접을 위해 기초 CS에 대한 복습중이다.
공부한 내용 중 요점이나 나중에 기억해야할 부분을 정리해보려고 한다.
내가 아는 부분은 생략되어 있을 수 있고, 혹여나 틀린 부분이 있을 수도 있으니 이 글을 보고 '다른 사람'이 공부하기에는 도움이 되지 않을 수 있으니 주의!
테스트 케이스
- 바운더리, 0, 음수 이런 걸 고려해서 넣어보자. 가장 큰 수, 작은 수 등
- 음수만 있는 경우, 양수만 있는 경우, 섞여 있는 경우 등 고려하기.
- 두 가지 이상이 섞여있는 경우, A케이스만 있는 경우, B케이스만 있는 경우, 둘 다 섞여 있는 경우로 나눠서 고려하기.
런타임 에러
- 오버플로우 주의하기. 바운더리 값끼리 더한다든지, 뺀다든지 해서 바운더리를 넘어가지 않도록 구현해야한다.
없는데 접근 No
- Stack, vector 등에서
pop()
혹은pop_back()
을 하려고 할 때 아무 것도 없으면 런타임 에러가 난다. if (!s.empty())
등으로 검사한 뒤 실행하도록 구현해야 한다.
효율성을 고려해야 할 때
- 복잡도가 좀 있는 함수를 여러 번 호출한다? 의심해보자. (ex. push_back(), pop_back() 등)
- 이중 for문으로 10만개 이상 돌린다? 의심.
가장 큰 수(maximum), 가장 작은 수(minimum) 구할 때 주의할 점
- 예를 들어, max 구할 때 음수가 섞여있는데 0으로 초기화하면 안됨
- 초기화 할 때
INT_MIN
이나INT_MAX
사용할 것
순서 상관 없이 경우의 수 구해야 할 때
- 정렬을 먼저 해서 hash로 개수 센 후, 조합 공식으로 푼다.
- 순서가 상관 없으므로 정렬을 하면 같아지기 때문.
hash 만으로 안 될 때
- hash나 map이 한 개로만 안될 때가 있다(되더라도 타임아웃)
- 그럴 땐 hash가 여러 개 필요할 수도 있다는 생각을 해보자
그 외
- 문제 중에
if 0 ≤ P < Q < R < N
는 것은 서로 다른 값, 혹은 인덱스라는 뜻이다.
'Study note > Coding test' 카테고리의 다른 글
그래프 탐색 알고리즘: DFS/BFS (0) | 2024.04.12 |
---|---|
그리디 & 구현 (0) | 2024.04.12 |
정렬 알고리즘(Sort) (0) | 2024.04.12 |
Vector 문법 정리 (C++) (0) | 2024.04.12 |
Heap & priority_queue (0) | 2024.04.12 |