Skip to content

Commit 763c4dd

Browse files
authored
Merge pull request #2145 from rivkode/main
[rivkode] WEEK 04 solutions
2 parents 4bc9ef5 + 3ce5b2d commit 763c4dd

File tree

2 files changed

+172
-0
lines changed

2 files changed

+172
-0
lines changed

โ€Žcoin-change/rivkode.javaโ€Ž

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/*
2+
1. ๋ฌธ์ œ ์ดํ•ด
3+
์ˆซ์ž๋“ค์„ ์กฐํ•ฉํ•ด์„œ ํƒ€๊ฒŸ ๋„˜๋ฒ„๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ฝ”์ธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
4+
๋งŒ์กฑํ•˜๋Š” ์กฐํ•ฉ์ด ์—†๋‹ค๋ฉด -1 ๋ฐ˜ํ™˜
5+
6+
๋ฐฐ์—ด ์ •๋ ฌ ํ›„ ์ž‘์€ ์ˆซ์ž๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๋”ํ•˜๋ฉฐ ํƒ€๊ฒŸ๋„˜๋ฒ„์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ์ฒดํฌ
7+
์ผ์น˜ํ•œ๋‹ค๋ฉด ๊ทธ๋•Œ์˜ ์ฝ”์ธ ๊ฐœ์ˆ˜๋ฅผ ๊ธฐ์กด ๊ฐœ์ˆ˜์™€ ๋น„๊ต ๋ฐ ์ดˆ๊ธฐํ™”
8+
๋งŒ์•ฝ ํฌ๋‹ค๋ฉด return ํ•˜์—ฌ ๋‹ค์Œ ์ˆซ์ž๋กœ ์ด๋™
9+
10+
2. ์˜ˆ์™ธ ์ƒํ™ฉ
11+
12+
output์ด 12๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ์™€ 0์ด ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฐ๊ฐ ๋ฌด์Šจ ๊ฒฝ์šฐ์ผ๊นŒ ?
13+
14+
12๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์–ด๋–ค ์กฐํ•ฉ์œผ๋กœ๋„ ํƒ€๊ฒŸ๋„˜๋ฒ„๋ฅผ ๋งŒ๋“ค์ง€ ๋ชปํ–ˆ์„ ๊ฒฝ์šฐ
15+
16+
0์ด ๋˜๋Š” ๊ฒฝ์šฐ๋Š” amount๊ฐ€ 0์ผ ๊ฒฝ์šฐ ์•„๋ฌด ์ˆซ์ž๋„ ๋ฐ˜ํ™˜๋˜๋ฉด ์•ˆ๋  ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ๊ฐ€์žฅ ์ฒ˜์Œ ์ดˆ๊ธฐํ™” ๋˜๊ณ  ๋ฐ”๋กœ ๋ฆฌํ„ด๋จ.
17+
18+
3. ์•Œ๊ณ ๋ฆฌ์ฆ˜
19+
dfs
20+
21+
4. ๊ตฌํ˜„
22+
์ˆ˜๋„ ์ฝ”๋“œ
23+
dfs(์‚ฌ์šฉํ•œ ์ฝ”์ธ ๊ฐœ์ˆ˜, ์ง€๊ธˆ๊นŒ์ง€์˜ ๊ฐ’)
24+
ํ˜„์žฌ ๊ฐ’ == ํƒ€๊ฒŸ ๊ฐ’ ์ฒดํฌ
25+
๋งž๋‹ค๋ฉด ์ตœ์†Œ๊ฐ’ ์ดˆ๊ธฐํ™”
26+
๋ฐ˜ํ™˜
27+
28+
for coins
29+
์ง€๊ธˆ๊นŒ์ง€์˜ ๊ฐ’ + ์ƒˆ๋กœ์šด ์ฝ”์ธ <= ํƒ€๊ฒŸ ๊ฐ’
30+
๋งž๋‹ค๋ฉด dfs(์‚ฌ์šฉํ•œ ์ฝ”์ธ ๊ฐœ์ˆ˜ + 1, ์ง€๊ธˆ๊นŒ์ง€์˜ ๊ฐ’ + ์ƒˆ๋กœ์šด ์ฝ”์ธ)
31+
32+
dp
33+
34+
์žฌ๊ท€๋กœ ํ’€์—ˆ์œผ๋‹ˆ Time limit์ด ๊ฑธ๋ฆฌ์ง€ ์•Š๊ธฐ ์œ„ํ•ด dp๋กœ๋„ ํ’€ ์ˆ˜ ์žˆ๋Š” ์ ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋‹ค.
35+
36+
dp ์ ํ™”์‹์„ ๋งŒ๋“ค์–ด ๋ณด์ž
37+
n ์›์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋™์ „์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜์ด๋ฏ€๋กœ
38+
n์ด ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ธˆ์•ก, coin์ด ํ˜„์žฌ ์„ ํƒํ•œ ๋™์ „์ด๋ผ๊ณ  ํ• ๋•Œ
39+
dp[n] = min(dp[n], dp[n-coin] + 1) ์ด ๋‚˜์˜จ๋‹ค.
40+
n-coin ์ด ๋‚˜์˜ค๊ฒŒ๋œ ์ด์œ ๋Š” n์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํŠน์ • ์ˆซ์ž์—์„œ coin ๋”ํ•˜์—ฌ n ์„ ๋งŒ๋“ค์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
41+
x + coin = n -> x = n - coin ์‹์ด ๋งŒ๋“ค์–ด ์ง„๋‹ค.
42+
ํ•ด๋‹น n-coin ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ตœ์†Œ๊ฐ’์—์„œ coin์„ ๋”ํ–ˆ์œผ๋ฏ€๋กœ 1์„ ๋”ํ•ด์คŒ์œผ๋กœ์จ
43+
์„ ํƒํ•œ coin ์—์„œ n ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
44+
45+
*/
46+
47+
import java.util.*;
48+
49+
class Solution {
50+
private int min;
51+
public int coinChange(int[] coins, int amount) {
52+
// int maxLength = 12;
53+
// min = maxLength + 1;
54+
// dfs(0, 0, amount, coins);
55+
// if (min == 13) {
56+
// return -1;
57+
// }
58+
59+
int[] dp = new int[amount + 1];
60+
61+
62+
for (int i=1; i<dp.length; i++) {
63+
dp[i] = amount + 1; // ์ตœ๋Œ€๊ฐ’๋ณด๋‹ค 1์„ ๋”ํ•˜์—ฌ ๋ฌดํšจํ•œ ๊ฐ’(์ตœ๋Œ€๊ฐ’๋ณด๋‹ค ํด ์ˆ˜ ์—†์Œ)์„ ์ž„์˜๋กœ ๋„ฃ์–ด์ค€๋‹ค.
64+
}
65+
dp[0] = 0;
66+
// coin ๋“ค์„ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ์ฝ”์ธ๋“ค์„ ๋ฃจํ”„๋งˆ๋‹ค ํ•ด๋‹น ๋™์ „์œผ๋กœ ์ตœ์ ํ™”๋ฅผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ 3๋ฒˆ์งธ ๋™์ „์„ ๋Œ๋•Œ์—๋Š” ์ด์ „ 1, 2๋ฒˆ์งธ์˜ ๋™์ „๋“ค์— ๋Œ€ํ•ด ๋ˆ„์ ๋œ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ฒŒ ๋œ๋‹ค.
67+
for (int c : coins) {
68+
// c ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ด์œ ๋Š” ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฝ”์ธ๋ณด๋‹ค ์ ์€ n ์„ ๋งŒ๋“ค ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ
69+
for (int n = c; n < amount + 1; n++) {
70+
dp[n] = Math.min(dp[n], dp[n-c] + 1);
71+
}
72+
}
73+
74+
if (dp[amount] == amount + 1) {
75+
return -1;
76+
}
77+
78+
return dp[amount];
79+
}
80+
81+
82+
// ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋ฐœ์ƒ
83+
// public void dfs(int count, long total, int amount, int[] coins) {
84+
// if (total == amount) {
85+
// min = Math.min(min, count);
86+
// return;
87+
// }
88+
89+
// for (int coin: coins) {
90+
// if (total + coin <= amount) {
91+
// dfs(count + 1, total + coin, amount, coins);
92+
// }
93+
// }
94+
// }
95+
}
96+
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* public class ListNode {
4+
* int val;
5+
* ListNode next;
6+
* ListNode() {}
7+
* ListNode(int val) { this.val = val; }
8+
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
9+
* }
10+
*/
11+
/*
12+
1. ๋ฌธ์ œ ์ดํ•ด
13+
๋‘๊ฐœ์˜ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋จธ์ง€ํ•œ๋‹ค
14+
์ด๋•Œ ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•ฉ์น˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ 2๊ฐœ์˜ head๋ฅผ ๋น„๊ตํ•ด์„œ ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒƒ์„ next๋กœ ๋ถ™์ด๋ฉด ๋œ๋‹ค
15+
16+
2. ์•Œ๊ณ ๋ฆฌ์ฆ˜
17+
while ์‚ฌ์šฉ, ์žฌ๊ท€
18+
19+
3. ์˜ˆ์™ธ ์ผ€์ด์Šค
20+
21+
๋‘˜์ค‘์— ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋จผ์ € null ์ด ๋˜๋ฒ„๋ฆฌ๋ฉด ๋‚˜๋จธ์ง€ ๋ฆฌ์ŠคํŠธ๋„ ๋ถ™์—ฌ์ค˜์•ผ ํ•˜๋ฏ€๋กœ while ๋ฌธ์ด ๋๋‚œ ๋’ค์— ๋ถ™์—ฌ์ค˜์•ผ ํ•œ๋‹ค.
22+
23+
4. ๊ตฌํ˜„
24+
๊ฐ head๋ฅผ ๋น„๊ตํ•ด์„œ ๋” ์ž‘์€ ๊ฒƒ์„ head ๋กœ ๋‘๊ณ  ์ž‘์€๊ฒƒ์˜ next์™€ ๋‹ค๋ฅธ ๋ฆฌ์ŠคํŠธ์˜ head ๋ฅผ ๋‹ค์‹œ ๋น„๊ตํ•œ๋‹ค
25+
๋งŒ์•ฝ ๊ฐ™๋‹ค๋ฉด ๋‘˜์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•œ๋‹ค
26+
์•„๋‹ˆ๋‹ค
27+
์ด๋ ‡๊ฒŒ ์ˆœ์„œ๊ฐ€ ๋˜์–ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ
28+
#0 ๋ฆฌ์ŠคํŠธ1๊ณผ ๋ฆฌ์ŠคํŠธ2๊ฐ€ Null์ด ์•„๋‹Œ์ง€ ์ฒดํฌํ•œ๋‹ค Null ์ด๋ฉด head ๋ฐ˜ํ™˜.
29+
#1 ๋‘๊ฐœ์˜ ๋น„๊ตํ•  ๋…ธ๋“œ๋ฅผ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค
30+
#2 ๋‘๊ฐœ์˜ ๊ฐ’์„ ๋น„๊ตํ•œ๋‹ค
31+
#3 ์ž‘์€ ๊ฐ’์„ ์ด์ „ Head์˜ Next๋กœ ์ •ํ•œ๋‹ค
32+
#4 ์ž‘์€ ๊ฐ’์˜ next๋ฅผ ๋‹ค์‹œ ๋น„๊ตํ•  ๋…ธ๋“œ๋กœ ์„ธํŒ…ํ•œ๋‹ค
33+
#5 2๋ฒˆ์œผ๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐ€์„œ ๋ฐ˜๋ณตํ•œ๋‹ค
34+
35+
์ฆ‰ ๋น„๊ตํ•  ๋…ธ๋“œ๋ฅผ ์ดˆ๊ธฐํ™” ํ•˜๊ณ 
36+
๋น„๊ตํ•ด์„œ next๋กœ ๋„ฃ๊ณ 
37+
๋‹ค์‹œ ์ดˆ๊ธฐํ™” ํ•ด์„œ ๋น„๊ตํ•œ๋‹ค
38+
39+
์˜ˆ๋ฅผ ๋“ค์–ด
40+
1 - 2 - 3
41+
3 - 4 - 5
42+
์ผ ๊ฒฝ์šฐ
43+
1์ด ์ž‘์œผ๋ฏ€๋กœ 1์„ head ๋กœ ๋‘๊ณ 
44+
next๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด 1์˜ Next์™€ 3์„ ๋น„๊ตํ•œ๋‹ค
45+
1์˜ Next๊ฐ€ 2์ด๋ฏ€๋กœ 1์˜ next๋Š” 2๊ฐ€ ๋œ๋‹ค
46+
2์˜ Next์™€ 3์„ ๋‹ค์‹œ ๋น„๊ตํ•œ๋‹ค
47+
48+
๋‹ต์ง€๋ฅผ ๋ณด๋‹ˆ ์žฌ๊ท€๋กœ๋„ ํ’€ ์ˆ˜ ์žˆ๊ณ  ๋‚ด๊ฐ€ ํ•œ ๋ฐฉ์‹์œผ๋กœ๋„ ํ’€ ์ˆ˜ ์žˆ๋„ค.
49+
50+
๊ฐ€์žฅ ์•ž์— dummy๋ฅผ ๋‘์–ด์„œ head๋ฅผ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ•ด์•ผ๊ฒ ๋‹ค.
51+
*/
52+
class Solution {
53+
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
54+
ListNode dummy = new ListNode(-1);
55+
ListNode node = dummy;
56+
57+
while (list1 != null && list2 != null) {
58+
// ๊ฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ’์„ ๋น„๊ต
59+
if (list1.val < list2.val) {
60+
node.next = list1;
61+
list1 = list1.next;
62+
} else {
63+
node.next = list2;
64+
list2 = list2.next;
65+
}
66+
67+
// Node ์˜ ์ปค์„œ๋ฅผ ๋‹ค์Œ์œผ๋กœ ์ด๋™
68+
node = node.next;
69+
}
70+
71+
// ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์„ ํ˜„์žฌ Node ์˜ next๋ฅผ ๋ถ™์—ฌ์ฃผ๊ธฐ ์œ„ํ•จ
72+
node.next = l1 != null ? l1 : l2;
73+
74+
return dummy.next;
75+
}
76+
}

0 commit comments

Comments
ย (0)