
- 힙(heap) 문제
- DP(Dynamic Programming) 문제
- DFS/BFS 문제
- 코딩테스트, 면접 특강
- 최대/최소 원소를 빠르게 찾으려면
힙(Heap)자료구조를 이용할 수 있다.- 연산 : 힙 구성(
heapify), 삽입(insert), 삭제(remove)
import heapqheapq.heapify(L) : 리스트 L 로부터 min heap 구성m = heapq.heappop(L) : min heap L 에서 최소값 삭제 (반환)heapq.heappush(L,x) : min heal L 에 원소 x 삽입https://velog.io/@hjjwa1234/lv2%EB%8D%94-%EB%A7%B5%EA%B2%8C
- Dynamic Programming : 주어진 최적화 문제를 재귀적인 방식으로 보다 작은 부분 문제로 나누어 부분 문제를 풀어, 이 해를 조합하여 전체 문제의 해답에 이르는 방식.
- 알고리즘의 진행에 따라 탐색해야 할 범위를 동적으로 결정 함으로써 탐색 범위를 한정할 수 있음
Dynamic Programming의 적용 예
1. 피보나치 수열
2. Knapsack Problem (가장 높은 값을 가지도록 물건들을 골라 배낭에 담는 문제)
https://velog.io/@hjjwa1234/N%EC%9C%BC%EB%A1%9C-%ED%91%9C%ED%98%84
그래프(graphs)
- 한 정점에서 인접한 모든 (아직 방문하지 않은) 정점을 방문하되, 각 인접 정점을 기준으로 깊이 우선 탐색을 끝낸 후 다음 정점으로 진행하는 탐색 방법.
스택(Stack)을 이용하여 어느 정점에서DFS를 하고 있는지를 기억하고 되돌아가야함
- 한 정점에서 인접한 모든 (아직 방문하지 않은) 정점을 방문하고, 방문한 각 인접 정점을 기준으로 (방문한 순서에 따라) 또다시 넓이 우선 탐색을 행하는 탐색 방법.
큐(Queue)를 이용하여 어느 정점에서BFS를 해야 하는지를 기록하고 진행해야함
https://velog.io/@hjjwa1234/%EC%97%AC%ED%96%89%EA%B2%BD%EB%A1%9C
problem solving) + 코드로 구현(code implementation)whiteboard test, live coding 방법 등 활용<코딩 문제의 대강의 종류>
Implementation : 제시된 흐름에 따라 실행하는 코드를 만들도록 요구
Algorithm Comprehension : 문제의 효과적/효율적 해법을 찾아내도록 요구
Competency Test : 특정한 (고난도) 자료구조와 알고리즘을 착안하여 제한시간 내에 문제의 답을 도출하도록 요구. 좋은 방법을 찾아내라는 테스트
기타 : 특정한 언어 구문(예: SQL)을 활용할 수 있는지를 테스트
<대비>
1. 구현 능력 갖추기 (적어도 하나의 프로그래밍 언어)
2. 기본적인 자료구조 이해 (Array, Stack/Queue, Hash/Map, Tree, Graph)
3. 기초 알고리즘 및 시간/공간 복잡도에 대한 이해
4. 현실 문제를 해결하기 위한 알고리즘 적용 해법 착안 사고훈련
5. 제한 시간 내에 오류 없이 코드 작성 및 디버깅할 수 있는 능력 훈련
<문제 해결 흐름>

빠지기 쉬운 함정
1. 코드를 짧게 쓴다고 빠르게 실행되는 것은 아님
2. 내가 쓴 코드가 어떻게 실행되는지 이해하고 있는 것이 중요. 문제의 성질이 어떤 것인지에 대한 이해.
Dynamic Programming 이 어떤 것이고 어떠한 방법으로 구성하면 되는지는 잘 파악했지만 실제로 구현하는 과정은 좀 애를 먹었던 것 같다.