๋ฌธ์ ์ค๋ช
ํธ๋ญ ์ฌ๋ฌ ๋๊ฐ ๊ฐ์ ๊ฐ๋ก์ง๋ฅด๋ ์ผ์ฐจ์ ๋ค๋ฆฌ๋ฅผ ์ ํด์ง ์์ผ๋ก ๊ฑด๋๋ ค ํฉ๋๋ค. ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ค๋ฉด ์ต์ ๋ช ์ด๊ฐ ๊ฑธ๋ฆฌ๋์ง ์์๋ด์ผ ํฉ๋๋ค. ๋ค๋ฆฌ์๋ ํธ๋ญ์ด ์ต๋ bridge_length๋ ์ฌ๋ผ๊ฐ ์ ์์ผ๋ฉฐ, ๋ค๋ฆฌ๋ weight ์ดํ๊น์ง์ ๋ฌด๊ฒ๋ฅผ ๊ฒฌ๋ ์ ์์ต๋๋ค. ๋จ, ๋ค๋ฆฌ์ ์์ ํ ์ค๋ฅด์ง ์์ ํธ๋ญ์ ๋ฌด๊ฒ๋ ๋ฌด์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ํธ๋ญ 2๋๊ฐ ์ฌ๋ผ๊ฐ ์ ์๊ณ ๋ฌด๊ฒ๋ฅผ 10kg๊น์ง ๊ฒฌ๋๋ ๋ค๋ฆฌ๊ฐ ์์ต๋๋ค. ๋ฌด๊ฒ๊ฐ [7, 4, 5, 6]kg์ธ ํธ๋ญ์ด ์์๋๋ก ์ต๋จ ์๊ฐ ์์ ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๊ฑด๋์ผ ํฉ๋๋ค.
๊ฒฝ๊ณผ ์๊ฐ | ๋ค๋ฆฌ๋ฅผ ์ง๋ ํธ๋ญ | ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ํธ๋ญ | ๋๊ธฐ ํธ๋ญ |
0 | [] | [] | [7,4,5,6] |
1~2 | [] | [7] | [4,5,6] |
3 | [7] | [4] | [5,6] |
4 | [7] | [4,5] | [6] |
5 | [7,4] | [5] | [6] |
6~7 | [7,4,5] | [6] | [] |
8 | [7,4,5,6] | [] | [] |
๋ฐ๋ผ์, ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ค๋ฉด ์ต์ 8์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค.
solution ํจ์์ ๋งค๊ฐ๋ณ์๋ก ๋ค๋ฆฌ์ ์ฌ๋ผ๊ฐ ์ ์๋ ํธ๋ญ ์ bridge_length, ๋ค๋ฆฌ๊ฐ ๊ฒฌ๋ ์ ์๋ ๋ฌด๊ฒ weight, ํธ๋ญ ๋ณ ๋ฌด๊ฒ truck_weights๊ฐ ์ฃผ์ด์ง๋๋ค. ์ด๋ ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ค๋ฉด ์ต์ ๋ช ์ด๊ฐ ๊ฑธ๋ฆฌ๋์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ ์กฐ๊ฑด
- bridge_length๋ 1 ์ด์ 10,000 ์ดํ์ ๋๋ค.
- weight๋ 1 ์ด์ 10,000 ์ดํ์ ๋๋ค.
- truck_weights์ ๊ธธ์ด๋ 1 ์ด์ 10,000 ์ดํ์ ๋๋ค.
- ๋ชจ๋ ํธ๋ญ์ ๋ฌด๊ฒ๋ 1 ์ด์ weight ์ดํ์ ๋๋ค.
์ ์ถ๋ ฅ ์
bridge_length | weight | truck_weights | return |
2 | 10 | [7,4,5,6] | 8 |
100 | 100 | [10] | 101 |
100 | 100 | [10,10,10,10,10,10,10,10,10,10] | 110 |
๋ด ๋ฌธ์ ํ์ด
import Foundation
func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
var stack = Array(repeating: 0, count: bridge_length)
var truck = truck_weights
var sec = 0
var now_weight = 0
// ๋ฐ๋ณต๋ง๋ค ํธ๋ญ์ ๋ฐฐ์ด์ ์ญ์
while !stack.isEmpty {
sec += 1
now_weight -= stack.removeFirst()
// ์ต์
๋ ๋ฐ์ธ๋ฉ. ๋ค๋ฆฌ์ ์ฌ๋ผ๊ฐ ํธ๋ญ์ด ์์ ๋๋ง ๊ณ์ฐ
if let t = truck.first {
if t + now_weight > weight {
stack.append(0)
}
else {
stack.append(t)
now_weight += truck.removeFirst()
}
}
}
return sec
}
- bridge_length๋งํผ 0์ ์ฑ์ด stack์ ๋ง๋ค์๋ค. (๋ค๋ฆฌ๋ฅผ ์๋ฏธ)
- while๋ฌธ์ผ๋ก, stack์ด ๋น์ด์์ง ์์ ๋์ ์ฐ์ฐ์ ๋ฐ๋ณตํ๋ค.
- ํ ๋ฒ์ ๋ฐ๋ณต๋ง๋ค sec์ 1์ ๋ํด์ฃผ์๋ค.
(์๋ก์ด ํธ๋ญ์ด ๋ค์ด๊ฐ๋ ์๋ค์ด๊ฐ๋ ํธ๋ญ์ ์์ง์์ ๊ณ์ ์กด์ฌํ๊ธฐ ๋๋ฌธ.) - now_weight ๋ณ์๋ ํ์ฌ ๋ค๋ฆฌ์ ์ฌ๋ผ๊ฐ์๋ ํธ๋ญ ๋ฌด๊ฒ์ ํฉ์ ์๋ฏธํ๋๋ฐ,
๋ฐ๋ณต๋ง๋ค 0์ด stack์์ pop๋ ์๋ ์๊ณ , ์ด๋ ํ ํธ๋ญ์ ๋ฌด๊ฒ๊ฐ pop๋ ์๋ ์์ง๋ง
๊ตณ์ด if๋ฌธ ์ฌ์ฉํ์ง ์๊ณ ๊ณ์ pop๋๋ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ now_weight์์ ๋นผ์ฃผ์๋ค. - if let ๊ตฌ๋ฌธ์ ์ด์ฉํ์ฌ ์์ง ๋ค๋ฆฌ์ ์ฌ๋ผ๊ฐ์ง ์์ ํธ๋ญ์ด ์กด์ฌํ ๋๋ง ์ํ๋๋๋ก ํด์ฃผ์๋ค.
๋๊ธฐ์ค์ธ ํธ๋ญ๊ณผ now_weight์ ๋ฌด๊ฒ ํฉ์ด weight๋ณด๋ค ํด๋๋ ๋ค๋ฆฌ์(stack์) 0์ ์ฌ๋ ค์ฃผ์๊ณ ,
์์๋๋ ๋ค๋ฆฌ์(stack์) ํธ๋ญ์ ์ฌ๋ ค์ค ํ now_weight์ ๋ฐฉ๊ธ ์ฌ๋ผ๊ฐ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ํฉ์ฐํ๋ค.
๐ก ํผ๋๋ฐฑ
- ์ต์
๋ ๋ฐ์ธ๋ฉ์ ์ด์ฉํ์ฌ ์กฐ๊ฑด์ ๊ตฌ์ฑํ๋ ์ฝ๋๊ฐ ํจ์ฌ ๊ฐ๊ฒฐํด์ง ๊ฒ ๊ฐ๋ค.
์ฒ์์๋ t๋ฅผ ๋ฐ๋ก ์ ์ธํด์ ์ฌ์ฉํ๋ ค๊ณ ํ๋๋ฐ, ๋๊ธฐ ํธ๋ญ์ด ์์ ๋๋ฅผ ๋ ๋ฐ๋ก ๋นผ์ค์ผํด์ ๋ณต์กํ๋ค. - ์ฝ๋๋ ์งง๊ณ ์ฌ์ด ๋ฌธ์ ๊ฐ์ง๋ง,, ์ ๋ง์ ๋ง ์ค๋์๊ฐ ๊ฑธ๋ ค ํผ ๋ฌธ์ ๋ผ๋ ์ฌ์ค,,
์์ธ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์๊ฐ์ด๊ณผ๋ ์ ๋จ๊ณ ์์ ๋ณ๊ฒฝํ๋์ ๋น๋ฝ์ด ๊ฒฐ์ ๋๋ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ๋ค.
๋์ค์ ๊ผญ ๋ค์ ํ ๋ฒ ํ์ด๋ณด์...
๋ฌธ์
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] ๊ท ํ์กํ ์ธ์ BOJ #4949 (0) | 2021.08.07 |
---|---|
[Swift Algorithm] ๊ดํธ BOJ #9012 (0) | 2021.08.07 |
[Swift Algorithm] ์ฅ์ ์ ์ ๊พธ๋ฏธ๊ธฐ BOJ #6198 (0) | 2021.08.06 |
[Swift Algorithm] ํ BOJ #2493 (0) | 2021.08.04 |
[Swift Algorithm] ์คํ ์์ด BOJ #1874 (2) | 2021.08.04 |
๋๊ธ