리트코드에서 해결한 문제 정리
*
의 경우 개선해야 함
# | 문제 | 정답 | 정리 |
---|---|---|---|
1 | Two Sum | Java (Easy) Java (Hard) |
- 완전탐색의 경우 O(n^2) - 해쉬 맵 을 활용하여 숫자를 찾는 방식으로 O(n)에 구현 가능 |
2 | Add Two Numbers | Java | - 링크드 리스트를 한 노드 씩 탐색하며 더하기 |
3 | Longest Substring Without Repeating Characters | Java | - 투 포인터 알고리즘 |
8 | String to Integer (atoi) | Java | - 주어진 알고리즘을 그대로 구현 - int자료형의 오버플로우를 고려하여 스트링 상태에서 숫자의 크기를 비교 |
9 | Palindrome Number | Java | - 스트링으로 변환 후 뒤집에서 비교 |
10 | Regular Expression Matching | Java | - dfs/백트래킹 활용 |
11 | Container With Most Water | Java | - 투 포인터 알고리즘 - 양 끝에서 더 낮은 벽을 줄여오는 방식으로 탐색 |
12 | Integer to Roman | Java* | - 규칙 & 재귀함수를 활용 |
13 | Roman to Integer | Java | - 심볼 가치가 큰 순서대로 비교하며 반복 |
14 | Longest Common Prefix | Java | - 각 스트링에 글자들을 비교하여 구함 |
15 | 3Sum | Java | - 정렬 후 첫 숫자를 정한 뒤 투 포인터 알고리즘. - O(n^2) |
16 | 3Sum Closest | Java | - 15번과 동일 |
17 | Letter Combinations of a Phone Number | Java | - dfs를 활용하여 완전탐색 - O(4^n) |
18 | 4Sum | Java | - 정렬 후 두 숫자를 투 포인터 알고리즘을 사용 - 해쉬맵을 활용하여 중복 체크 |
19 | Remove Nth Node From End of List | Java | - 링크드 리스트의 길이 계산 후 |
20 | Valid Parentheses | Java | - 스택을 활용하여 유효성 체크 |
21 | Merge Two Sorted Lists | Java | - 새 링크드 리스트 생성 후 두 리스트의 해드를 비교하며 붙임 |
22 | Generate Parentheses | Java | - dfs/백트래킹 활용 |
23 | Merge k Sorted Lists | Java | - 21과 원리 비슷 리스트들 중 가장 작은 수를 붙임 |
24 | Swap Nodes in Pairs | Java | - 링크드 리스트를 따라가며 2 노드씩 바꿈 |
25 | Reverse Nodes in k-Group | Java | - 3개의 포인터를 유지하며 링크드 리스트를 뒤집는다 |
26 | Remove Duplicates from Sorted Array | Java | - 공간복잡도를 O(1)로 하기 위해 배열을 탐색하던 도중 중복이 발생하면 한칸 씩 앞으로 옮김 |
27 | Remove Element | Java | - 공간복잡도를 O(1)로 하기 위해 배열을 탐색하며 일치하면 한칸 씩 앞으로 옮김 |
28 | Implement strStr() | Java | - substring을 구하여 비교 |
30 | Substring with Concatenation of All Words | Java | - 해쉬 맵을 활용하여 각 word의 개수를 미리 저장한 뒤, 스트링을 탐색하며 매치를 찾는다 |
31 | Next Permutation | Java | - 공간복잡도를 O(1)로 하기 위해 순열의 성질을 활용 |
32 | Longest Valid Parentheses | Java | - 스택을 활용하여 최대길이를 구한다 - 시간 복잡도 : O(n) |
33 | Search in Rotated Sorted Array | Java | - 이진탐색의 원리를 활용하여 정렬된 배열의 상태에 따라 경우의 수를 나누어구한다 |
34 | Find First and Last Position of Element in Sorted Array | Java | - 시간복잡도를 O(log(n))으로 만들기 위해 이진탐색을 두번 진행하여 target의 앞과 뒤를 찾음 |
35 | Search Insert Position | Java | - 이진탐색 활용 |
36 | Valid Sudoku | Java | - 주어진 룰대로 반복하며 행, 열, sub-box를 확인 |
37 | Sudoku Solver | Java | - dfs/백트래킹을 활용 - 현재 위치에서 가능한 숫자들을 계산하고 탐색 |
38 | Count and Say | Java | - 재귀 방식으로 해결 |
39 | Combination Sum | Java | - dfs/백트래킹을 활용 |
40 | Combination Sum II | Java | - dfs/백트래킹을 활용 - 중복 제거를 위해 Set 사용 |
43 | Multiply Strings | Java | - 한 글자씩 정수로 변환하여 계산하는 곱셈, 덧셈 함수 구현 |
45 | Jump Game II | Java | - dp 활용 - O(n * m) |
48 | Rotate Image | Java | - (i, j) -> (j, (n - 1) - i) |
49 | Group Anagrams | Java | - 단어의 구성 알파벳을 키로 활용 - 해싱하여 분리 |
프로그래머스에서 해결한 문제 정리
*
의 경우 개선해야 함
문제 | 정답 | 정리 | 레벨 |
---|---|---|---|
양궁대회 | Kotlin | - dfs 완전 탐색 | lv2 |
멀쩡한 사각형 | Java | - gcd를 활용한 수학 문제 | lv2 |
124 나라의 숫자 | Java | - 3진법을 계산하듯 계산하며 3으로 나누어 떨어지는 경우 1을 빼준다 | lv2 |
[1차] 뉴스 클러스터링 | Java | - 두 스트링에 대한 map을 생성하여 각 원소의 개수를 계산한 뒤 합집합, 교집합의 크기를 구한다 | lv2 |
양과 늑대 | Kotlin | - dfs로 탐색, 지금까지 방문한 노드가 현재 상태 | lv3 |
파괴되지 않은 건물 | Kotlin | - 누적 합 배열 활용 | lv3 |
[1차] 셔틀버스 | Java | - 콘의 출근 시간을 분 단위별로 가능 여부를 모두 계산해 본다 | lv3 |
자물쇠와 열쇠 | Java | - 가능한 모든 열쇠 - 키 조합에 대해 확인한다. | lv3 |
[1차] 추석 트래픽 | Java* | - 스트링을 처리 시작시간, 종료 시간으로 파싱 후 가능한 조합을 모두 비교한다. | lv3 |
백준에서 해결한 문제 정리
문제 | 정답 | 정리 |
---|---|---|
13168 | Java | - 이진 탐색, 해싱 |
11066 | Java | - 다이나믹 프로그래밍 - O(n^3), dp[i][j] = min{ dp[i][k] + dp[k][j] } |
코포 문제 정리
문제 | 정답 | 정리 |
---|---|---|
1690B | Java | - 단순 구현 문제 |