반응형
1. 문제를 한 번에 분석하지 말고 동작 단위로 쪼개서 분석하여 한 번에 생각해야 하는 양을 줄여라.
2. 제약 사항을 정리해두고 테스트 케이스를 추가하라.
3. 입력값을 분석하라.
4. 핵심 키워드를 파악하라.
| 키워드 | 상황 | |
| 스택 | - 쌍이 맞는지 - 최근 |
- 무언가를 저장하고 반대로 처리해야 할 때 - 데이터의 조합이 균형을 이뤄야할 때 - 알고리즘이 재귀 특성을 가질 때 - 최근 상태 추적 |
| 큐 | - 순서대로 - ~대로 동작하는 경우 - 스케줄링 - 최소 시간 |
- 특정 조건에 따라 시뮬레이션할 때 - 시작 지점부터 목표 지점까지 최단 거리 |
| 깊이 우선 탐색 | - 모든 경로 | - 메모리 사용량이 제한적일 때의 탐색 - 백트래킹 문제를 풀 때 |
| 너비 우선 탐색 | - 최적 - 레벨 순회 - 최소 단계 - 네트워크 전파 |
- 시작 지점부터 최단 경로나 최소 횟수를 찾아야할 때 |
| 백트래킹 | - 조합 - 순열 - 부분 집합 |
- 조합 및 순열 문제 - 특정 조건을 만족하는 부분 집합 |
| 최단 경로 | - 최단 경로 - 최소 시간 - 최소 비용 - 트래픽 - 음의 순환 - 단일 출발점 경로 |
- 다익스트라: 특정 지점에서 나머지 지점까지 가는 최단 경로 - 벨만-포드: 음의 순환 탐지, 음의 가중치를 가진 그래프에서 최단 경로 |
5. 데이터의 흐름이나 구성을 파악하라.
6. 컴퓨터가 초당 연산할 수 있는 최대 횟수는 1억 번이다. 따라서 초당 연산 횟수가 3,000만이 넘는 알고리즘을 사용하지 말 것! (다음은 제한 시간이 1초인 문제에 각 시간 복잡도별로 허용할 수 있는 최대 연산 횟수이다)
| 시간 복잡도 | 최대 연산 횟수 |
| O(N!) | 10 |
| O(2^N) | 20~25 |
| O(N^3) | 200~300 |
| O(N^2) | 3,000~5,000 |
| O(NlogN) | 100만 |
| O(N) | 1,000~2,000만 |
| O(logN) | 10억 |
7. 부동소수형(float) 데이터를 활용하는 문제에는 오차 허용 범위를 언급하는 경우가 많다. 엡실론을 신경 쓰자.
(sys.float_info.epsilon보다 작으면 두 값을 같다고 판단)
8. 조기 반환으로 예외 처리/보호 구문을 작성하자.
9. 합성 함수를 활용하자. func = lambda x: funcA(funcB(x))
반응형
'개발 및 알고리즘 > 알고리즘' 카테고리의 다른 글
| [JS/typescript] Null 병합 연산자 ?? (물음표 2개) (1) | 2024.07.23 |
|---|---|
| [React Native] 리액트 네이티브에서 스플래시 스크린에 애니메이션 구현하기 (lottie + react-native-bootsplash) (0) | 2024.07.12 |
| [React Native] 리액트 네이티브에서 기기 설정 언어 확인하기 (react-native-localize) (1) | 2024.07.11 |
| [Programmers] 두 개 뽑아서 더하기* (0) | 2024.04.01 |
| 배열 (0) | 2024.03.20 |