[JeonJe] WEEK 07 Solutions - #2796
Conversation
๐ JeonJe ๋์ ํ์ต ํํฉ์ด๋ฒ ์ฃผ ์ ์ถ ๋ฌธ์
๋์ ํ์ต ์์ฝ
๋ฌธ์ ํ์ด ํํฉ
๐ค ์ด ๋๊ธ์ GitHub App์ ํตํด ์๋์ผ๋ก ์์ฑ๋์์ต๋๋ค. ๐ข API ์ฌ์ฉ๋ (gpt-5-nano)
|
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
- ํจํด: Two Pointers, Sliding Window, Hash Map / Hash Set
- ์ค๋ช : ์ผ์ชฝ ํฌ์ธํฐ์ ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ฅผ ์ด์ฉํด ๋ถ๋ถ ๋ฌธ์์ด์ ์ค๋ณต ์ฌ๋ถ๋ฅผ ์ฐฝ ะฟะตัะตะฟ๋์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ, ์ฐฝ์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ Sliding Window ํจํด์ด๋ค. Set์ผ๋ก ์ค๋ณต ์ฌ๋ถ๋ฅผ ํ์ธํ๋ฉฐ ๋ ํฌ์ธํฐ๋ฅผ ์กฐ์ ํด ์ต์ฅ ๋ถ๋ถ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ๊ฐฑ์ ํ๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(n) | O(n) | โ |
| Space | O(min(n, m)) | O(k) | โ |
ํผ๋๋ฐฑ: ์ผ์ชฝ ํฌ์ธํฐ์ ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ฅผ ์ด์ฉํ ๋ํ์ ์ธ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ํ ์๊ฐ์ ๋์ํ๋ค. ์ค๋ณต์ ์ ๊ฑฐํ๊ธฐ ์ํด ํด์์ ์ ์ฌ์ฉํ๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
- ํจํด: Two Pointers, Greedy, Linked List
- ์ค๋ช : ํด๋น ์ฝ๋๋ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์์์ ๋ค๋ก ์ํํ๋ฉฐ ํฌ์ธํฐ๋ฅผ ๋ค์ง๋ ๋ฐฉ์์ผ๋ก ๋ ธ๋๋ฅผ ์ญ์์ผ๋ก ๋ง๋ญ๋๋ค. ๋ ๊ฐ์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด ๊ฐ ๋ ธ๋์ ๋ฐฉํฅ์ ๋ฐ๊พธ๋ ์ผ๋ฐ์ ์ธ ๋ ํฌ์ธํฐ(๋๋ ํด์ ์์ ๊ด๋ฆฌ) ๊ธฐ๋ฒ์ ํด๋นํฉ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(n) | O(n) | โ |
| Space | O(1) | O(1) | โ |
ํผ๋๋ฐฑ: ํฌ์ธํฐ ๋ ๊ฐ(๋๋ ์ธ ๊ฐ)๋ง์ผ๋ก ๋ ธ๋์ ์ฐ๊ฒฐ ๋ฐฉํฅ์ ๋ค์ง์ด ์ํํ๋ฉฐ ์ฒ๋ฆฌํ๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
longest-substring-without-repeating-characters/JeonJe.java
import java.util.*;
// TC: O(n)
// SC: O(min(n, m)) (m = ๋ฌธ์ ์งํฉ ํฌ๊ธฐ)
class Solution {
public int lengthOfLongestSubstring(String s) {
int answer = 0;
int left = 0;
Set<Character> temp = new HashSet<>();
for (int right = 0; right < s.length(); right++) {
// ์ค๋ณต์ด ์ฌ๋ผ์ง ๋๊น์ง s[left]๋ฅผ set์์ ๋นผ๋ฉฐ left๋ฅผ ์ ์ง์ํจ๋ค.
while (temp.contains(s.charAt(right))) {
temp.remove(s.charAt(left));
left++;
}
temp.add(s.charAt(right));
answer = Math.max(answer, right - left + 1);
}
return answer;
}
}- ํจํด: Two Pointers, Hash Map / Hash Set, Sliding Window
- ์ค๋ช : ๋ ํฌ์ธํฐ(left, right)๋ก ์ฐฝ(window)์ ํ์ฅ/์ถ์ํ๋ฉฐ ์ค๋ณต ์ ๊ฑฐ๋ฅผ ์ํด ํด์์ ์ผ๋ก ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ถ์ ํ๋ค. ์ฐฝ์ ๊ธธ์ด๋ฅผ ์ต๋ํํ๋ ๋ฐฉ์์ผ๋ก ๋ถ๋ถ ๋ฌธ์์ด ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ์ ํ์ ์ธ Sliding Window ํจํด์ด๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(n) | O(n) | โ |
| Space | O(min(n, m)) | O(min(m, n)) | โ |
ํผ๋๋ฐฑ: ๋ ์ธ๋ฑ์ค(left, right)๋ก ์ฐฝ์ ์ ์งํ๋ฉฐ ๊ฐ ๋ฌธ์๋ฅผ ์งํฉ์ ๋ด์ ์ค๋ณต ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ๊ฐ ๋ฌธ์์ ๋ํด ํ ๋ฒ์ฉ๋ง ์ถ๊ฐ/์ญ์ ๋๋ฏ๋ก ์ ํ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ป์ต๋๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
number-of-islands/JeonJe.java
import java.util.*;
// TC: O(m * n)
// SC: O(m * n)
class Solution {
private static int[] dx = {0, -1, 0, 1};
private static int[] dy = {1, 0, -1, 0};
private int n = 0;
private int m = 0;
public int numIslands(char[][] grid) {
n = grid[0].length;
m = grid.length;
boolean[][] visited = new boolean[m][n];
int answer = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (!visited[i][j] && grid[i][j] == '1') {
answer++;
dfs(i, j, grid, visited);
}
}
}
return answer;
}
private void dfs(int x, int y, char[][] grid, boolean[][] visited) {
visited[x][y] = true;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (0 <= nx && nx < m && 0 <= ny && ny < n && grid[nx][ny] == '1' && !visited[nx][ny]) {
dfs(nx, ny, grid, visited);
}
}
}
}- ํจํด: Depth-First Search, Hash Map / Hash Set
- ์ค๋ช : ๊ทธ๋ฆฌ๋์์ 1๋ก ์ฐ๊ฒฐ๋ ์์ญ์ DFS๋ก ํ์ํ์ฌ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํ๋ฉฐ ์น์ ๋ง๋ค ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์ํค๋ ํ์ด๋ก, ์ธ์ ๋ ธ๋ ํ์์ ์ฌ๊ท๋ฅผ ์ด์ฉํฉ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(m * n) | O(m*n) | โ |
| Space | O(m * n) | O(m*n) | โ |
ํผ๋๋ฐฑ: ๊ทธ๋ฆฌ๋ ๋ชจ๋ ์นธ์ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธํ๋ฉฐ, ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ boolean ๋ฐฐ์ด๋ก ์ถ์ ํฉ๋๋ค. DFS ์ฌ๊ท ๋์ ์คํ ์ฌ์ฉ ์ ๊ณต๊ฐ ์ฌ์ฉ์ด ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
reverse-linked-list/JeonJe.java
import java.util.*;
// TC: O(n)
// SC: O(1)
class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode cur = head;
while (cur != null) {
ListNode temp = cur.next;
cur.next = prev;
prev = cur;
cur = temp;
}
return prev;
}
}- ํจํด: Two Pointers, Linked List
- ์ค๋ช : ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ์ญ์์ผ๋ก ๋ค์ง๋ ๋ํ์ ๊ธฐ๋ฒ์ผ๋ก, ํฌ์ธํฐ ๋ ๊ฐ๋ฅผ ์ฌ์ฉํด ๋ ธ๋๋ฅผ ์ํํ๋ฉฐ ๋ฐฉํฅ์ ๋ฐ๊ฟ๋๊ฐ๋ ๋ฐฉ์์ ๋๋ค. ๊ณต๊ฐ ๋ณต์ก๋ O(1)์ด๋ฉฐ ํ๋ฆ์ ๋ ํฌ์ธํฐ๋ฅผ ๊ต์ฐจ์ํค๋ ํํ๋ก ๊ตฌํ๋ฉ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(n) | O(n) | โ |
| Space | O(1) | O(1) | โ |
ํผ๋๋ฐฑ: ๋ฌด์๋ณด๋ค ๊ธฐ์กด ํฌ์ธํฐ๋ฅผ ์์๋ก ์ ์ฅํ์ฌ ์ญ์ ์ํค๋ ํ์ค ํ์ด๋ก, ์ถ๊ฐ ๊ณต๊ฐ ์์ด ํ ๋ฒ์ ์ํ๋ก ํด๊ฒฐํฉ๋๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
unique-paths/JeonJe.java
import java.util.*;
// TC: O(m * n)
// SC: O(m * n)
class Solution {
public int uniquePaths(int m, int n) {
int[][] arr = new int[m][n];
int upSide;
int leftSide;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (i == 0 && j == 0) {
arr[i][j] = 1;
continue;
}
upSide = i - 1 < 0 ? 0 : arr[i - 1][j];
leftSide = j - 1 < 0 ? 0 : arr[i][j - 1];
arr[i][j] = upSide + leftSide;
}
}
return arr[m - 1][n - 1];
}
}- ํจํด: Dynamic Programming
- ์ค๋ช : 2์ฐจ์ DP ๋ฐฐ์ด์ ์ฌ์ฉํด ์ข์๋จ์์ ์ฐํ๋จ๊น์ง์ ๊ฒฝ๋ก ์๋ฅผ ๋์ ํฉ์ผ๋ก ๊ณ์ฐํฉ๋๋ค. ๊ฐ ์์น์ ๊ฐ์ ์์ชฝ๊ณผ ์ผ์ชฝ์ ๊ฒฝ๋ก ์์ ํฉ์ผ๋ก ๊ฒฐ์ ๋๋ฉฐ, ์ค๋ณต ๊ณ์ฐ ์์ด ์ต์ ๋ถ๋ถ๊ตฌ์กฐ๋ฅผ ์ด์ฉํฉ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(m * n) | O(m*n) | โ |
| Space | O(m * n) | O(m*n) | โ |
ํผ๋๋ฐฑ: ๊ฐ ์ ์ ๊ฐ์ ์์ ์ ๊ณผ ์ผ์ชฝ ์ ์ ํฉ์ผ๋ก ๊ณ์ฐ๋๋ฉฐ, ๊ฒฝ๊ณ ์ฒ๋ฆฌ ์ 0์ ์ฌ์ฉํด ๊ฐ๋จํ ๊ตฌํํ๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
There was a problem hiding this comment.
๐ท๏ธ ์๊ณ ๋ฆฌ์ฆ ํจํด ๋ถ์
unique-paths/JeonJe.java
import java.util.*;
// TC: O(m * n)
// SC: O(n)
class Solution {
public int uniquePaths(int m, int n) {
int[] arr = new int[n];
Arrays.fill(arr, 1);
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
arr[j] = arr[j] + arr[j - 1];
}
}
return arr[n - 1];
}
}- ํจํด: Dynamic Programming, Greedy
- ์ค๋ช : 2์ฐจ์ ๊ฒฉ์์์ ์์์ ์์ ๋์ฐฉ์ ๊น์ง์ ๊ฒฝ๋ก ์๋ฅผ ํ๋ ฌ๋ก ๊ณ์ฐํ๋ ๋ฌธ์ ๋ก, ํ ์ค ๋ฐฐ์ด๋ก ์ต์ ํํ๋ DP ๊ธฐ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. ๊ฐ ์ ์ ๊ฐ์ ์์ชฝ๊ณผ ์ผ์ชฝ์ ๊ฒฝ๋ก ์์ ํฉ์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ด๊ธฐ ์ํด 1์ฐจ์ ๋ฐฐ์ด๋ก ๊ตฌํํฉ๋๋ค.
๐ ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์
| ์ ์ ๋ถ์ | ์ค์ ๋ถ์ | ๊ฒฐ๊ณผ | |
|---|---|---|---|
| Time | O(m * n) | O(m * n) | โ |
| Space | O(n) | O(n) | โ |
ํผ๋๋ฐฑ: ๊ฐ ํ๋ง๋ค ํ์ฌ ์ด์ ๊ฐ์ ์ด์ ์ด๊ณผ ๊ฐ์ ํ์ ๊ฐ์ ์ด์ฉํด ๊ฐฑ์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ํํ๋ค.
๊ฐ์ ์ ์: ํ์ฌ ๊ตฌํ์ด ์ ์ ํด ๋ณด์ ๋๋ค.
parkhojeong
left a comment
There was a problem hiding this comment.
์๊ณ ํ์ จ์ต๋๋ค. ํญ์ ๊น๋ํ ํ์ด ์ฌ๋ ค์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ฌ์ํ ์ปค๋ฉํธ ๋ช ๊ฐ ๋จ๊ฒผ์ต๋๋ค.
| int answer = 0; | ||
| int left = 0; | ||
|
|
||
| Set<Character> temp = new HashSet<>(); |
There was a problem hiding this comment.
์๋ฏธ๋ฅผ ๋๋ฌ๋ด๋ ๋ค์ด๋ฐ ์ฌ์ฉํ์๋ฉด ์ข์ ๊ฑฐ ๊ฐ์ต๋๋ค.
| while (temp.contains(s.charAt(right))) { | ||
| temp.remove(s.charAt(left)); | ||
| left++; | ||
| } |
There was a problem hiding this comment.
๊ฐ ๋ฌธ์์ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํด๋๋ฉด ์ค๋ณต ๋ฐ์์ ํ ์นธ์ฉ ์ฎ๊ธฐ์ง ์์๋ ๋์ ์ต์ ํ๊ฐ ๊ฐ๋ฅํ ๊ฑฐ ๊ฐ์ต๋๋ค.
| // TC: O(m * n) | ||
| // SC: O(m * n) | ||
| class Solution { | ||
|
|
||
| private static int[] dx = {0, -1, 0, 1}; | ||
| private static int[] dy = {1, 0, -1, 0}; | ||
|
|
||
| private int n = 0; | ||
| private int m = 0; | ||
|
|
||
| public int numIslands(char[][] grid) { | ||
| n = grid[0].length; | ||
| m = grid.length; |
There was a problem hiding this comment.
์ฌ์ํ์ง๋ง ๋ณต์ก๋ ํ๊ธฐ๋ m * n ์ธ๋ฐ ๋ณ์ ์์๋ n, m์ด๋ผ์ ์์๊ฐ ์ ๋ฐ๋์ด์์ง ์๊ฐ์ด ๋ค์์ต๋๋ค. for loop์์๋ m๋ถํฐ ๋์์ m, n ์์๋ก ์ ์ธ๋๋ฉด ์ข ๋ ์์ฐ์ค๋ฌ์ธ ๊ฑฐ ๊ฐ์๋ฐ n, m ์์๋ก ์ฐ์ ์ด์ ๊ฐ ์์๊น์?
| n = grid[0].length; | ||
| m = grid.length; | ||
|
|
||
| boolean[][] visited = new boolean[m][n]; |
There was a problem hiding this comment.
in-place ๋งํนํ๋ ๋ฐฉ์๋ ๊ณ ๋ คํ์ จ์ ๊ฑฐ ๊ฐ์๋ฐ ํน์ ์ด ๋ฌธ์ ์์ visited ๋ฅผ ์ฌ์ฉํ์ ์ด์ ๊ฐ ์์๊น์?
๋ต์ ์ ์ถ ๋ฌธ์
์์ฑ์ ์ฒดํฌ ๋ฆฌ์คํธ
In Review๋ก ์ค์ ํด์ฃผ์ธ์.๊ฒํ ์ ์ฒดํฌ ๋ฆฌ์คํธ
Important
๋ณธ์ธ ๋ต์ ์ ์ถ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๋ถ PR ํ๋ ์ด์์ ๋ฐ๋์ ๊ฒํ ๋ฅผ ํด์ฃผ์ ์ผ ํฉ๋๋ค!