Skip to content

Commit 50f75bb

Browse files
authored
Merge pull request #1859 from jinvicky/main
[jinvicky] WEEK 06 solutions
2 parents 11eac89 + 3dc3622 commit 50f75bb

File tree

11 files changed

+364
-21
lines changed

11 files changed

+364
-21
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* ๊ตฌํ•˜๋ ค๋Š” ๊ฒƒ์€ ์ตœ๋Œ€ ์˜์—ญ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— x,y์ถ•์„ ๊ณ„์‚ฐํ•œ ํ˜„์žฌ ์˜์—ญ๊ณผ ๊ธฐ์กด ์˜์—ญ์„ ๋น„๊ตํ•ด max๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
3+
* ํฌ์ธํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ขํž๊นŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์‰ฝ๊ฒŒ ๋งํ•ด์„œ start์™€ end ์ค‘ ๋” ์ž‘์€ ์ชฝ์„ ์•ž ๋˜๋Š” ๋’ค๋กœ ์ด๋™ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
4+
* ์˜์—ญ์€ ๋‘ ๋ง‰๋Œ€๊ฐ€ ๋ชจ๋‘ ์ถฉ์กฑ๊ฐ€๋Šฅํ•œ ๊ธธ์ด๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ Math.min()์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
5+
*/
6+
class Solution {
7+
public int maxArea(int[] height) {
8+
int start = 0;
9+
int end = height.length - 1;
10+
int area = 0;
11+
12+
while (start < end) {
13+
int y = Math.min(height[start], height[end]); // y์ถ•์€ ๋” ์ž‘์€ ๊ฐ’์œผ๋กœ ์„ค์ •
14+
int x = Math.abs(start - end); // end - start๋„ ๊ฐ€๋Šฅ
15+
int calculatedArea = x * y;
16+
area = Math.max(area, calculatedArea);
17+
18+
// [์ค‘์š”] ํฌ์ธํ„ฐ ์ด๋™ ๋กœ์ง
19+
if (height[start] <= height[end])
20+
start++;
21+
else
22+
end--;
23+
}
24+
return area;
25+
}
26+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
class WordDictionary {
2+
3+
private static class Node {
4+
Node[] next = new Node[26];
5+
boolean isEnd;
6+
}
7+
8+
private final Node root = new Node();
9+
10+
public WordDictionary() {}
11+
12+
public void addWord(String word) {
13+
Node cur = root;
14+
for (int k = 0; k < word.length(); k++) {
15+
char ch = word.charAt(k);
16+
int i = ch - 'a';
17+
if (cur.next[i] == null) cur.next[i] = new Node();
18+
cur = cur.next[i];
19+
}
20+
cur.isEnd = true;
21+
}
22+
23+
public boolean search(String word) {
24+
return dfs(word, 0, root);
25+
}
26+
27+
private boolean dfs(String word, int idx, Node node) {
28+
if (node == null) return false;
29+
if (idx == word.length()) return node.isEnd;
30+
31+
char ch = word.charAt(idx);
32+
if (ch == '.') {
33+
// ๋ชจ๋“  ๊ฐ€๋Šฅ ๋ฌธ์ž๋กœ ํ•œ ๊ธ€์ž ๋งค์นญ
34+
for (int c = 0; c < 26; c++) {
35+
if (node.next[c] != null && dfs(word, idx + 1, node.next[c])) {
36+
return true;
37+
}
38+
}
39+
return false;
40+
} else {
41+
return dfs(word, idx + 1, node.next[ch - 'a']);
42+
}
43+
}
44+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
class Solution {
2+
/**
3+
* ๊ธฐ์กด house-robber 1 ๋ฌธ์ œ์—์„œ ๋กœ์ง์„ ๊ฐ€์ ธ์˜ค๋˜, ์ ‘๊ทผ๋ฒ•์„ ๋‹ฌ๋ฆฌํ•˜๋Š” ๋ฌธ์ œ
4+
* ์ฒ˜์Œ์ƒ๊ฐํ–ˆ๋˜ ์ ‘๊ทผ๋ฒ•์€ ๊ทธ๋ƒฅ dp๊ฐ’์—์„œ ์ฒซ๋ฒˆ์งธ ๋˜๋Š” ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ๋นผ์„œ ๋‚˜์˜จ ์ตœ๋Œ“๊ฐ’ ์•„๋‹Œ๊ฐ€? ํ–ˆ์ง€๋งŒ ๋ฒ”์œ„์— ๋”ฐ๋ผ dp๊ฐ€ ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ ์˜ค๋‹ต
5+
*/
6+
public int rob(int[] nums) {
7+
if (nums.length == 1) return nums[0];
8+
else if (nums.length == 2)
9+
return Math.max(nums[0], nums[1]);
10+
else if (nums.length == 3) {
11+
return Math.max(Math.max(nums[0], nums[1]), nums[2]);
12+
}
13+
14+
int n = nums.length;
15+
// ์ฒซ์งธ ์š”์†Œ๋งŒ ํฌํ•จํ•œ dp (๋งˆ์ง€๋ง‰ ์š”์†Œ ํฌํ•จ X)
16+
int[] firstDp = new int[n - 1];
17+
firstDp[0] = nums[0];
18+
for (int i = 1; i < n - 1; i++) {
19+
int prev2AndNowRob = (i - 2 < 0 ? 0 : firstDp[i - 2]) + nums[i];
20+
int prev1Rob = firstDp[i - 1];
21+
22+
firstDp[i] = Math.max(prev2AndNowRob, prev1Rob);
23+
}
24+
// System.out.println(firstDp[n-2]); // ok
25+
26+
// ๋งˆ์ง€๋ง‰ ์š”์†Œ๋งŒ ํฌํ•จํ•œ dp (์ฒซ๋ฒˆ์งธ ์š”์†Œ ํฌํ•จ X)
27+
int[] lastDp = new int[n];
28+
lastDp[1] = nums[1];
29+
for (int i = 2; i < n; i++) {
30+
int prev2AndNowRob = (i - 2 < 1 ? 0 : lastDp[i - 2]) + nums[i];
31+
int prev1Rob = lastDp[i - 1];
32+
33+
lastDp[i] = Math.max(prev2AndNowRob, prev1Rob);
34+
}
35+
// System.out.println(lastDp[n-1]); // ok
36+
37+
return Math.max(firstDp[n - 2], lastDp[n - 1]);
38+
}
39+
}

โ€Žlongest-consecutive-sequence/jinvicky.javaโ€Ž

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,28 @@
11
import java.util.HashSet;
22
import java.util.Set;
33

4-
// ์—ฐ์†์ ์ธ ์ˆซ์ž์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „, ๋‹ค์Œ ์ˆ˜๊ฐ€ ์ง‘ํ•ฉ์˜ ์ผ๋ถ€์ธ์ง€๋ฅผ ํŒŒ์•…ํ•ด์•ผ ํ•œ๋‹ค.
5-
// map, set ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์กฐํšŒ ์„ฑ๋Šฅ์„ O(1)๋กœ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
6-
// ์–ด๋ ค์› ๋˜ ์ ์€ ์—ฐ์†์ ์ธ ์ˆซ์ž์˜ start๊ฐ€ ๋˜๋ƒ ์—ฌ๋ถ€ ์กฐ๊ฑด์„ ๋– ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. while๋ฌธ์ด ์•ฝํ•ด์„œ length++ํ•˜๋Š” ๋กœ์ง์ด ํž˜๋“ค์—ˆ๋‹ค.
7-
// ๋ฌธ์ œ์˜ ์กฐ๊ฑด์€ ๋ฐฐ์—ด ๋‚ด์—์„œ์˜ ์—ฐ์†์ ์ธ ์ˆซ์ž์˜ ๊ธธ์ด์ด๊ธฐ ๋•Œ๋ฌธ์— while์„ ์‚ฌ์šฉํ•ด๋„ ์„ฑ๋Šฅ ์ด์Šˆ ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ๋‹ค.
4+
/**
5+
* ์™œ set์„ ์ผ์„๊นŒ? ๋‚ด๊ฐ€ ์›ํ•˜๋Š” "ํŠน์ • ์กฐ๊ฑด"์„ ์ œ์‹œํ–ˆ์„ ๋•Œ ๊ทธ ์ˆซ์ž๋ฅผ O(1)์œผ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
6+
* set์ด ์ค„ ๊ฒƒ์„ ์•Œ๊ธฐ์— ๋‚˜๋Š” ์กฐ๊ฑด์„ ์„ค๊ณ„ํ•˜๋Š” ๋ฐ๋งŒ ์ง‘์ค‘ํ•œ๋‹ค.
7+
* 1. ๋‚ด๊ฐ€ ํฌํ•จ๋œ ์—ฐ์†๋œ ์‹œํ€€์Šค๊ฐ€ ์žˆ๋Š”๊ฐ€? -> set.contains(n-1)
8+
* 2. ๋‚ด๊ฐ€ ์ƒˆ๋กœ์šด ์‹œํ€€์Šค์˜ start์ธ๊ฐ€? -> !set.contains(n-1)
9+
* <p>
10+
* ์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ๊ธด ๊ธธ์ด๋ฅผ ๊ตฌํ•œ๋‹ค == Math.max(๊ธฐ์กด ์ตœ๋Œ€๊ธธ์ด, ํ˜„์žฌ ๊ณ„์‚ฐํ•œ ์ตœ๋Œ€๊ธธ์ด) -> ์ž๋™์œผ๋กœ Math.max()๊ฐ€ ๋– ์˜ค๋ฅธ๋‹ค.
11+
* ํ˜„์žฌ ์ตœ๋Œ€๊ธธ์ด๋Š” ๋ณธ์ธ์„ ํฌํ•จํ•œ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.
12+
* [๊ธธ์ด๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ ํ•ญ์ƒ ํ•ด์•ผ ํ• ๊นŒ???] -> ์•„๋‹ˆ๋‹ค!
13+
* ์™œ? ์ด๋ฏธ ๋‚ด๊ฐ€ ํฌํ•จ๋œ ์—ฐ์†๋œ ์‹œํ€€์Šค๋Š” maxLength๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณค๋Š”๋ฐ ๊ตณ์ด ๋˜?
14+
* <p>
15+
* ๋ฐฐ์›€: ์ผ๋‹จ ๊ณ„์‚ฐ์„ ๋– ์˜ฌ๋ฆฐ๋‹ค. -> ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ณ„์‚ฐ์„ ์–ธ์ œ(if) ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ธ์ง€ ์กฐ๊ฑด์„ ์„ค์ •ํ•œ๋‹ค. (ํ•ญ์ƒ ํ•ด๋„ ๋˜๋Š”๊ฐ€? ์ค‘๋ณต๋˜์ง€๋Š” ์•Š๋Š”๊ฐ€?)
16+
* <p>
17+
* [์„ฑ๋Šฅ์— ๋Œ€ํ•œ ์ž˜๋ชป๋œ ์ƒ๊ฐ]
18+
* O(n)์ด๋ผ๋ฉด ๊ผญ for๋ฌธ 1๋ฒˆ์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ž˜๋ชป๋œ ์ƒ๊ฐ์„ ๊ฐ–๊ณ  ์žˆ์—ˆ๋‹ค.
19+
* ์ฒซ ๋ฒˆ์งธ ๋ฃจํ”„๊ฐ€ O(n), ๋‘ ๋ฒˆ์งธ ๋ฃจํ”„๊ฐ€ O(n)์ด๊ณ , ๋‘ ๊ฐœ๋ฅผ ํ•ฉ์น˜๋ฉด O(n + n)์ž…๋‹ˆ๋‹ค.
20+
* ์‹œ๊ฐ„ ๋ณต์žก๋„ ๊ณ„์‚ฐ์—์„œ ์ƒ์ˆ˜ ๊ณ„์ˆ˜๋Š” ๋ฌด์‹œ๋˜๋ฏ€๋กœ ๊ฒฐ๊ตญ O(n)์œผ๋กœ ํ‘œ๊ธฐํ•œ๋‹ค.
21+
* <p>
22+
* [ํ›„๊ธฐ]
23+
* ์ฒ˜์Œ์—๋Š” ์–ด ๊ธฐ์กด์ด๋ž‘... ์ง€๊ธˆ์ด๋ž‘ ๋ณ„๋„ ๋ฐฐ์—ด๋กœ ์ฒดํฌ? ๊ทธ๋Ÿฐ๋ฐ ๋ฐฐ์—ด์˜ ๊ฐœ์ˆ˜๊ฐ€ ์–ด๋””๊นŒ์ง€ ๋Š˜์–ด๋‚˜์ง€...?
24+
* ํ•ญ์ƒ ๊ธฐ์–ตํ•  ์ ์€ ์ตœ๋Œ€ ๊ธธ์ด, ์ตœ์†Œ ๊ธธ์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ๋Š” ๊ฒฐ๊ณผ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์–ด๋А ์ˆซ์ž๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋Š”์ง€ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค.
25+
*/
826
class Solution {
927
public int longestConsecutive(int[] nums) {
1028
Set<Integer> set = new HashSet<>();
@@ -26,7 +44,6 @@ public int longestConsecutive(int[] nums) {
2644
maxLength = Math.max(length, maxLength);
2745
}
2846
}
29-
3047
return maxLength;
3148
}
3249
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import java.util.ArrayList;
2+
import java.util.List;
3+
4+
/**
5+
* ๊ฐ€์žฅ ๋จผ์ € ๋“ค์—ˆ๋˜ ์˜๋ฌธ์€ ์™œ dp๊ฐ€ 2์ฐจ์› ๋ฐฐ์—ด์ด ์•„๋‹๊นŒ? ์˜€์ง€๋งŒ,
6+
* dp๋ฅผ 2์ฐจ์› ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฒฝ๋กœ ์ €์žฅ์ด๋‚˜ ์ƒํƒœ ์ „์ด๊ฐ€ 2๊ฐœ ์ด์ƒ์˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‚˜๋ˆ ์งˆ ๋•Œ์ธ๋ฐ
7+
* ์ด ๋ฌธ์ œ๋Š” 1์ฐจ์›์œผ๋กœ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฑด โ€œ๋งˆ์ง€๋ง‰ ์›์†Œ ์œ„์น˜ iโ€๋ผ๋Š” ํ•˜๋‚˜์˜ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
8+
*
9+
* LIS = "์ฃผ์–ด์ง„ ์ˆ˜์—ด์—์„œ ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค๋ฉด์„œ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ๋Š” ์›์†Œ ์ค‘, ๊ฐ’์ด ์ ์  ์ปค์ง€๋„๋ก ์„ ํƒํ–ˆ์„ ๋•Œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ์ˆ˜์—ด."
10+
* brute force๋กœ ์ด์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ for๋ฌธ + BS๋ฅผ ๊ณ๋“ค์˜€์Šต๋‹ˆ๋‹ค.
11+
*
12+
* Arrays.binarySearch()๋Š” ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ๋งŒ ๋™์ž‘ํ•˜๋ฏ€๋กœ ์ด ๋ฌธ์ œ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
13+
*
14+
* ์‹ ๊ทœ ๋ฉ”์„œ๋“œ: Collections.binarySearch()
15+
* List ์•ˆ์˜ ์š”์†Œ๋“ค์— ๋Œ€ํ•ด์„œ ์ด๋ถ„ ํƒ์ƒ‰์„ ํ•ด์„œ ํ•ด๋‹น index๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. (์—†์„ ๊ฒฝ์šฐ -1)
16+
* ๋‹จ, list ์•ˆ์˜ ์š”์†Œ๋“ค์€ ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค (์ด๋ถ„ ํƒ์ƒ‰์˜ ๊ธฐ๋ณธ ์กฐ๊ฑด์ฒ˜๋Ÿผ)
17+
* ์‹ ๊ทœ ๋ฉ”์„œ๋“œ ํ˜น์€ ์ง์ ‘์ ์œผ๋กœ binarySearch() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์›๋ณธ nums๋ฅผ ์ด๋ถ„ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ
18+
* ์ง๊ด€์ ์œผ๋กœ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ„ํŽธํ•œ ๋ฉ”์„œ๋“œ ๋ฐฉ์‹์ธ Collections.binarySearch()๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
19+
*
20+
*
21+
* [ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ณผ์ • ์ถœ๋ ฅ]
22+
* 0
23+
* [10]
24+
* 0
25+
* [9]
26+
* 0
27+
* [2]
28+
* 1
29+
* [2, 5]
30+
* 1
31+
* [2, 3]
32+
* 2
33+
* [2, 3, 7]
34+
* 3
35+
* [2, 3, 7, 101]
36+
* 3
37+
* [2, 3, 7, 18]
38+
*/
39+
import java.util.*;
40+
41+
class Solution {
42+
public int lengthOfLIS(int[] nums) {
43+
List<Integer> tails = new ArrayList<>(); // ๊ธธ์ด k์ธ ์ฆ๊ฐ€ ์ˆ˜์—ด์˜ "๊ผฌ๋ฆฌ ์ตœ์†Ÿ๊ฐ’"๋“ค
44+
45+
for (int x : nums) {
46+
int idx = Collections.binarySearch(tails, x);
47+
// ํ•ด๋‹น x ์ˆซ์ž๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์ด๋Š” list์—์„œ ๋ฒ”์œ„์— ๋ฒ—์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์—
48+
// ์Œ์ˆ˜๋ฉด ์‚ฝ์ž… ์œ„์น˜๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋ฒ”์œ„ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
49+
if (idx < 0) idx = -(idx + 1);
50+
51+
// ์ค‘์š” ์—ฐ์‚ฐ์€ ๋”ํ•˜๊ธฐ์™€ ๊ต์ฒด์ž…๋‹ˆ๋‹ค.
52+
// ๊ฐ€์žฅ ํฌ๋‹ค๋Š” ๊ฒƒ: ์ฃผ์–ด์ง„ ์ธ๋ฑ์Šค์™€ ๊ผฌ๋ฆฌ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ๊ฐ™๋‹ค. -> ์ƒˆ subsequence๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค.
53+
// ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์€ ์ตœ๋Œ“๊ฐ’๋ณด๋‹ค ๋” ์ž‘์€ ๊ฐ’์ด ์žˆ๋‹ค๋Š” ๊ฒƒ, ๊ทธ ์ž๋ฆฌ๋ฅผ ์ฃผ์–ด์ง„ x๋กœ ๊ต์ฒดํ•œ๋‹ค.
54+
// ๊ฒฐ๋ก : ๊ฐ€์žฅ ํฌ๋ฉด add, ๊ทธ ์™ธ์—๋Š” ์ธ๋ฑ์Šค ์ž๋ฆฌ๋ฅผ x๋กœ ๊ต์ฒด
55+
if (idx == tails.size()) {
56+
tails.add(x); // ๊ฐ€์žฅ ํฌ๋ฉด ๋’ค์— ์ถ”๊ฐ€ โ†’ ๊ธธ์ด +1
57+
} else {
58+
tails.set(idx, x); // ์•„๋‹ˆ๋ฉด ๊ทธ ์ž๋ฆฌ์˜ ๊ผฌ๋ฆฌ๋ฅผ ๋” ์ž‘์€ x๋กœ ๊ต์ฒด
59+
}
60+
}
61+
return tails.size(); // ๊ผฌ๋ฆฌ ๋ฆฌ์ŠคํŠธ ๊ธธ์ด = LIS ๊ธธ์ด
62+
}
63+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class Solution {
2+
public int maxProduct(int[] nums) {
3+
if (nums.length == 1)
4+
return nums[0];
5+
if (nums.length == 2) {
6+
return Math.max(nums[0], Math.max(nums[0] * nums[1], nums[1]));
7+
}
8+
9+
int len = nums.length;
10+
int[] max = new int[len];
11+
int[] min = new int[len];
12+
int overall = 0;
13+
14+
max[0] = min[0] = overall = nums[0];
15+
16+
for (int i = 1; i < len; i++) {
17+
// ํ›„๋ณด 3์„ ์ค€๋น„
18+
int justNum = nums[i];
19+
// ๊ณ„์† ๋”ํ•œ ๊ฐ’
20+
int keep = justNum * max[i-1];
21+
// ์ด์ „ ์ตœ์†Œ์— ์Œ์ˆ˜ ๊ณฑํ•ด์„œ ๋ฆฌ๋ฒ„์Šค
22+
int reverse = justNum * min[i-1];
23+
24+
// max์™€ min ๋ฐฐ์—ด์„ ์—…๋ฐ์ดํŠธ
25+
max[i] = Math.max(justNum, Math.max(keep, reverse));
26+
min[i] = Math.min(justNum, Math.min(keep, reverse));
27+
28+
// overall์„ ์—…๋ฐ์ดํŠธ, ๋ˆ„์  ๋น„๊ต๋กœ ์ตœ๋Œ€ ์ „์—ญ ์œ ์ง€
29+
overall = Math.max(overall, max[i]);
30+
}
31+
return overall;
32+
}
33+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution {
2+
/**
3+
* ์ฒ˜์Œ์—๋Š” set ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋™์›ํ•ด์„œ ๊ผญ ๋น ์ง„ ์ˆซ์ž๋ฅผ ์ฐพ๊ฒ ๋‹ค๊ณ  ๋‹ค์งํ–ˆ์œผ๋‚˜,
4+
* ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋‹จ์ˆœํžˆ ๋ฒ”์œ„๊ฐ€ 0๋ถ€ํ„ฐ nums.length๊นŒ์ง€์˜ ์—ฐ์†๋œ ์‹œํ€€์Šค๋ผ๋ฉด
5+
* ๊ทธ๋ƒฅ 0๋ถ€ํ„ฐ n๊นŒ์ง€ ๋”ํ–ˆ์„ ๋•Œ์˜ ์›๋ž˜ ์˜ˆ์ƒ๊ฐ’์—์„œ ํ˜„์žฌ nums์˜ ํ•ฉ๊ณ„๋ฅผ ๋นผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
6+
*
7+
* ์ตœ๋Œ“๊ฐ’, ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ• ๋•Œ์™€ ๋น„์Šทํ•˜๊ฒŒ ๊ตณ์ด ๋‚ด์šฉ ์•ˆ์„ ๋‹ค ์ฐพ์œผ๋ ค๊ณ  ํ˜•์‹ ์ž๋ฃŒ๊ตฌ์กฐ์— ์–ฝ๋งค์ด์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
8+
*/
9+
public int missingNumber(int[] nums) {
10+
int expected = 0; // 0๋ถ€ํ„ฐ n๊นŒ์ง€ ๋”ํ•œ ์ˆซ์ž์˜ ํ•ฉ๊ณ„
11+
int input = 0; //nums๊ฐ€ ์ค€ ์ˆซ์ž๋“ค์˜ ํ•ฉ๊ณ„
12+
13+
for (int n : nums) {
14+
input += n;
15+
}
16+
17+
for (int i = 0; i <= nums.length; i++) {
18+
expected += i;
19+
}
20+
// System.out.println(expected + " and " + input);
21+
22+
return expected - input;
23+
}
24+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import java.util.*;
2+
3+
/**
4+
* dir[][]์˜ ๋ฐฉํ–ฅ์„ ๋‚˜์„ ์œผ๋กœ ๋งž์ถ”๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”. ๋‹จ์ˆœ dfs, bfs์˜ 4๋ฐฉํ–ฅ์ด ์•„๋‹˜.
5+
*/
6+
class Solution {
7+
public List<Integer> spiralOrder(int[][] matrix) {
8+
List<Integer> ans = new ArrayList<>();
9+
int m = matrix.length;
10+
if (m == 0) return ans;
11+
int n = matrix[0].length;
12+
13+
boolean[][] visited = new boolean[m][n];
14+
15+
// ํ•œ ๋ฐฐ์—ด์— (row, col) ๋ฐฉํ–ฅ์Œ์„ ๋ณด๊ด€: โ†’ โ†“ โ† โ†‘
16+
int[][] dir = {{0,1}, {1,0}, {0,-1}, {-1,0}};
17+
int d = 0; // ํ˜„์žฌ ๋ฐฉํ–ฅ ์ธ๋ฑ์Šค
18+
int i = 0, j = 0; // ํ˜„์žฌ ์œ„์น˜
19+
20+
for (int k = 0; k < m * n; k++) {
21+
ans.add(matrix[i][j]);
22+
visited[i][j] = true;
23+
24+
int ni = i + dir[d][0];
25+
int nj = j + dir[d][1];
26+
27+
// ๊ฒฝ๊ณ„ ๋ฐ–์ด๊ฑฐ๋‚˜ ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋ฉด ๋ฐฉํ–ฅ ์ „ํ™˜
28+
if (ni < 0 || ni >= m || nj < 0 || nj >= n || visited[ni][nj]) {
29+
d = (d + 1) % 4; // 0โ†’1โ†’2โ†’3โ†’0
30+
ni = i + dir[d][0];
31+
nj = j + dir[d][1];
32+
}
33+
34+
i = ni; j = nj;
35+
}
36+
return ans;
37+
}
38+
}

โ€Žtop-k-frequent-elements/jinvicky.javaโ€Ž

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
1-
import java.util.HashMap;
2-
import java.util.Map;
3-
import java.util.PriorityQueue;
1+
import java.util.*;
42

53
class Solution {
64
public int[] topKFrequent(int[] nums, int k) {
7-
// [ํ’€์ด]
8-
// 1. <์ˆซ์ž: ๋นˆ๋„์ˆ˜>๋ฅผ ์ €์žฅํ•˜๋Š” HashMap๊ณผ [๋นˆ๋„์ˆ˜, ์ˆซ์ž]๋ฅผ ์ €์žฅํ•˜๋Š” PriorityQueue๋ฅผ ์„ ์–ธํ•œ๋‹ค.
9-
// 2. HashMap์— ์ˆซ์ž๋ณ„๋กœ ๋นˆ๋„์ˆ˜๋ฅผ ํ•จ๊ป˜ ์ €์žฅํ•ด์„œ ํ•ด์‹œํ…Œ์ด๋ธ”์„ ๋งŒ๋“ ๋‹ค.
10-
// [์šฐ์„ ์ˆœ์œ„ ํ์— ์‚ฌ์šฉ๋œ ์ž๋ฃŒ๊ตฌ์กฐ]
11-
// 1. ๋ณ„๋„ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธ
12-
// 2. ์š”๊ตฌ์‚ฌํ•ญ ์ž๋ฃŒํ˜• ๋ฐฐ์—ด์„ ์„ ์–ธํ•œ๋‹ค.
13-
// ์ฒ˜์Œ์—๋Š” ๋ณ„๋„ ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ–ˆ๋‹ค๊ฐ€ ๊ฐ’์ด 2๊ฐœ์ด๋ฉฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋กœ์ง ์ž์ฒด๊ฐ€ ์–ด๋ ค์›Œ์„œ int[] ๊ตฌ์กฐ๋กœ ํ’€์ดํ–ˆ๋‹ค.
14-
// (์ฃผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์–ด๋ ค์šฐ๋ฉด ๊ฐ€๋…์„ฑ์ด ๋‚˜์˜๋”๋ผ๋„ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ์Šต๊ด€์ด ์žˆ๋‹ค)
15-
// [์–ด๋ ค์› ๋˜ ์ ]
16-
// 1. ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ๋งค๋ฒˆ ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ๋‚ด๋ถ€ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ k๊ฐœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.
17-
// ๋˜ํ•œ ๊ธฐ์กด [๋นˆ๋„์ˆ˜, ์ˆซ์ž]๋ฅผ ๋ฒ„๋ ค์•ผ๋งŒ ์˜ฌ๋ฐ”๋ฅธ ๋‹ต์„ ๋„์ถœํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
18-
// 2. [์ˆซ์ž, ๋นˆ๋„์ˆ˜]๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ๋งŒ ์ƒ๊ฐํ–ˆ๋”๋‹ˆ ๋‚ด๋ถ€ ์ •๋ ฌ์„ ์–ด๋–ป๊ฒŒ ํ•˜์ง€ ๋ชปํ•ด์„œ ๊ต‰์žฅํžˆ ๊ณ ๋ฏผํ–ˆ๋‹ค. ์ •๋‹ต์€ ๋ฐ˜๋Œ€์˜€๋‹ค.
19-
5+
/**
6+
* for๋ฌธ์ด ์ด 3๋ฒˆ ํ•„์š”ํ•˜๋‹ค. (1.๋นˆ๋„_์ดˆ๊ธฐํ™”, 2.ํ์— ์ €์žฅ, 3.๊ฒฐ๊ณผ๋ฐฐ์—ด์— ํ• ๋‹น
7+
* ๋นˆ๋„_์ดˆ๊ธฐํ™” -> k:v๋กœ ์‰ฝ๊ฒŒ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
8+
* ํ์— ์ €์žฅ -> ์ตœ์†Œ ํž™์œผ๋กœ ์ •๋ ฌ๋˜๋Š” ์šฐ์„ ์ˆœ์œ„ ํ ์„ ์–ธ -> ํ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ k:v๋ฅผ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด new int[2]๊ฐ€ ๊ฐ€์žฅ ์‰ฌ์›€
9+
* ๊ฒฐ๊ณผ๋ฐฐ์—ด์— ํ• ๋‹น -> k๊ฐœ๋งŒํผ answer[]์— ์ €์žฅ
10+
*
11+
* ๋ฌธ์ œ๋Š” ์ƒ์œ„ k๊ฐœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๊ณ  ๊ทธ๋ฅผ ์œ„ํ•ด์„œ๋Š” k๊ฐœ๋ฅผ ๋„˜์—ˆ์„ ๋•Œ ๋นˆ๋„์ˆ˜๊ฐ€ ๋‚ฎ์€ ์ˆœ์œผ๋กœ flushํ•˜๋Š” ๋กœ์ง์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ.
12+
* ํ๋Š” ์„ ์ž…์„ ์ถœ -> ๋นˆ๋„์ˆ˜๊ฐ€ ๋‚ฎ์„ ์ˆ˜๋ก ์œ„๋กœ ์ •๋ ฌ๋˜๊ฒŒ ํ•ด์•ผ flushํ–ˆ์„ ๋•Œ ๋นˆ๋„์ˆ˜๊ฐ€ ๋‚ฎ์€ ์ˆœ์„œ๋Œ€๋กœ ์‚ฌ๋ผ์ง„๋‹ค.
13+
*
14+
* ๊ฒฐ๊ณผ๋ฐฐ์—ด์— ํ• ๋‹นํ•  ๋•Œ๋Š” ๊ทธ๋ƒฅ ์•ž์—์„œ๋ถ€ํ„ฐ ํ•˜๋ฉด ๋œ๋‹ค.
15+
* ์ด๋ฏธ k๊ฐœ๋ฅผ ๋งŒ์กฑํ–ˆ๊ณ , ๋นˆ๋„์ˆ˜๊ฐ€ ๋‚ฎ -> ๋†’ ์ˆœ์„œ๋Œ€๋กœ ๊ทธ๋Œ€๋กœ ์Œ“์œผ๋ฉด ๋œ๋‹ค.
16+
*
17+
* ์ฒซ๋ฒˆ์งธ๋ถ€ํ„ฐ ๊บผ๋‚ด์„œ ๊ฒฐ๊ณผ๋ฐฐ์—ด์— ํ• ๋‹นํ•  ๊ฑฐ๋ฉด [๋นˆ๋„์ˆ˜, ์ˆซ์ž]๋กœ ํ์— ์ €์žฅํ•˜๋Š” ๊ฒŒ ๋งž๋‹ค
18+
*/
2019
int[] answer = new int[k];
2120

2221
Map<Integer, Integer> map = new HashMap<>();

โ€Žunique-paths/jinvicky.javaโ€Ž

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution {
2+
public int uniquePaths(int m, int n) {
3+
/**
4+
* ์—ฌ๊ธฐ์„œ ์ด๋™๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋Š” right, down ๋‘๊ฐ€์ง€ ๊ฒฝ์šฐ์ด๋‹ค.
5+
* ๋ชจ๋“  ๋ธ”๋ก์€ ๋‚ด ์™ผ์ชฝ ๋ธ”๋ก์—์„œ ๋‚˜๋กœ ์˜จ ๊ฒฝ์šฐ, ๋‚ด ์œ„ ๋ธ”๋ก์—์„œ ๋‚˜๋กœ ์˜จ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•ด์„œ [i-1][j] + [i][j-1]๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
6+
* ๋‹จ ๊ฐ€๋กœ ์ฒซ๋ฒˆ์งธ ์ค„๊ณผ ์„ธ๋กœ ์ฒซ๋ฒˆ์งธ ์ค„์€ 1๋กœ ์ดˆ๊ธฐํ™” ํ•ด์ค˜์•ผ ํ•œ๋‹ค. (์™œ๋ƒํ•˜๋ฉด ๊ฐ๊ฐ down, right์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๋ธ”๋ก๋“ค์€ 1๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ๋ฐ–์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)
7+
*/
8+
int[][] dp = new int[m][n];
9+
for (int i = 0; i < m; i++) {
10+
dp[i][0] = 1;
11+
}
12+
13+
for (int j = 0; j < n; j++) {
14+
dp[0][j] = 1;
15+
}
16+
17+
for (int i = 1; i < m; i++) {
18+
for (int j = 1; j < n; j++) {
19+
dp[i][j] = dp[i-1][j] + dp[i][j-1];
20+
}
21+
}
22+
return dp[m - 1][n - 1];
23+
}
24+
}

0 commit comments

Comments
ย (0)