diff --git a/longest-substring-without-repeating-characters/JeonJe.java b/longest-substring-without-repeating-characters/JeonJe.java new file mode 100644 index 0000000000..017ea650aa --- /dev/null +++ b/longest-substring-without-repeating-characters/JeonJe.java @@ -0,0 +1,27 @@ +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 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; + } +} diff --git a/number-of-islands/JeonJe.java b/number-of-islands/JeonJe.java new file mode 100644 index 0000000000..53d942dca0 --- /dev/null +++ b/number-of-islands/JeonJe.java @@ -0,0 +1,44 @@ +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); + } + } + } +} diff --git a/reverse-linked-list/JeonJe.java b/reverse-linked-list/JeonJe.java new file mode 100644 index 0000000000..fcacc39f20 --- /dev/null +++ b/reverse-linked-list/JeonJe.java @@ -0,0 +1,19 @@ +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; + } +} diff --git a/unique-paths/JeonJe.java b/unique-paths/JeonJe.java new file mode 100644 index 0000000000..f4f0cf3b38 --- /dev/null +++ b/unique-paths/JeonJe.java @@ -0,0 +1,19 @@ +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]; + } +}