Skip to content

Commit c2e5272

Browse files
author
แ„‹แ…ตแ„‹แ…งแ†ซแ„‰แ…ฎ
committed
coin change
1 parent c627e15 commit c2e5272

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

โ€Žcoin-change/EcoFriendlyAppleSu.kt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package leetcode_study
2+
3+
/*
4+
* ์ฃผ์–ด์ง„ ๋™์ „์˜ ์ข…๋ฅ˜์™€ ๊ฐœ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์–ด์ง„ ๊ธˆ์•ก์„ ๋งŒ๋“ค ๋•Œ, ์ค‘๋ณต์„ ํ—ˆ์šฉํ•œ ์ตœ์†Œ ๋™์ „ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
5+
* ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•ด ๋ฌธ์ œ ํ•ด๊ฒฐ
6+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
7+
* -> queue ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๊ฐ ๋™์ „(n)์„ ๊บผ๋‚ด๊ณ  ๋ชฉํ‘œ ๊ธˆ์•ก(amount == k)๊นŒ์ง€ ๋„๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ: O(n * k)
8+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(k)
9+
* -> ๋™์ „ ์‚ฌ์šฉ ํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” board์˜ ํฌ๊ธฐ
10+
* */
11+
fun coinChange(coins: IntArray, amount: Int): Int {
12+
if (amount == 0) return 0
13+
if (coins.isEmpty() || coins.any { it <= 0 }) return -1
14+
15+
val board = IntArray(amount + 1) { -1 }
16+
val queue = ArrayDeque<Int>()
17+
18+
for (coin in coins) {
19+
if (coin <= amount) {
20+
queue.add(coin)
21+
board[coin] = 1 // ๋™์ „ ํ•˜๋‚˜๋กœ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ
22+
}
23+
}
24+
25+
while (queue.isNotEmpty()) {
26+
val currentPosition = queue.pollFirst()
27+
for (coin in coins) {
28+
val nextPosition = currentPosition + coin
29+
if (nextPosition in 1..amount) {
30+
// ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ๋” ์ ์€ ๋™์ „์œผ๋กœ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•˜๋ฉด ์—…๋ฐ์ดํŠธ
31+
if (board[nextPosition] == -1 || board[nextPosition] > board[currentPosition] + 1) {
32+
queue.add(nextPosition)
33+
board[nextPosition] = board[currentPosition] + 1
34+
}
35+
}
36+
}
37+
}
38+
39+
return board[amount]
40+
}

0 commit comments

Comments
ย (0)