알고리즘 학습내역을 올리는 저장소
-
소요시간은? 성능은?
-
왜 틀렸는가? 무슨 실수를 했나?
-
문제에서 간과한 점은? (출력 문제, 데이터 크기, 제약조건 등등)
-
코너 케이스
-
"불가능한 경우" 찾기
- 원소 갯수가 많다면 투 포인터 또는 이분 탐색을 의심해 봐라.
- Stack을 활용한 탐색 속도 단축하기
Array |
List |
Queue |
Map |
수학 |
Comparator | Comparable |
비트마스킹 |
시뮬레이션 |
DP |
Regex |
문자열 탐색 |
조합론(순열, 조합, 부분집합) |
부분집합 |
최소 신장 트리 : 모든 정점 연결 |
최단 경로 알고리즘 |
PriorityQueue<int[]> pq = new PriorityQueue<>(
(a1, a2) -> a1[0] - a2[0]
);
- BFS를 돌리면서 좌표를 별도의 Queue에 담았다가, while문 종료 후 갯수를 배열에 저장.
- Map, Set을 활용하는 풀이도 참고바람. 프로그래머스 석유 시추
백준 제한 시간은 c++기준이고 Java는 2x+1, Python은 3x+2 정도 가중치가 붙는다. 추가시간이 없다면 그냥 얄짤없이 써 있는 시간대로 풀어야 되고, 시간복잡도를 고민해봐야 된다는 것.
Rendered | Code | Content |
---|---|---|
🚀 | rocket | SOLVED |
🔥 | fire | FAILED |
📦 | package | 패키지 구조 정리 및 기타 유지보수 |
📝 | memo | 문서 업데이트 |
👨💻 About |
완전탐색을 시도했을 때의 시간복잡도를 확인한 후 데이터의 크기를 살펴본다면,
이 방법이 통과되는지 아닌지 쉽게 알 수 있을 것이다.
코테 문제 중에선 완탐으로 풀리는 문제를 그리디나, 다른 방법으로 풀리는 것 처럼 눈속임하는 문제가 정말 많다.
네이버 기출 4번도 그러한 문제였는데, 바로 완탐부터 의심했으면 정말 쉽게 풀렸을 문제였다.
switch( (int) score / 10 ) {
case 0 :
...
break;
case 1 :
...
break;
case 2 :
...
break;
}
parseInt()는 기본 int를 반환, valueOf()는 Integer 래퍼 객체를 반환