2022. 10. 22. 12:01ใํ๋ก๊ทธ๋๋จธ์ค-Swift
ํ๋ก๊ทธ๋๋จธ์ค - ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ
๋ฌธ์ ์ค๋ช
https://school.programmers.co.kr/learn/courses/30/lessons/42583
๋์ ํ์ด
(ํธ๋ญ์๋ฌด๊ฒ, ์๊ฐ์ด) ํํ์ ์ด์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
ํ๋ฅผ ์ฌ์ฉํ์ง๋ง ๊ตฌํ์ ์๊ฐ์ ๋ง์ด ์จ์ ๊ตฌํ๋ฐฉ์์ผ๋ก ํ์ด๋ฅผ ํ ๊ฒ ๊ฐ๋ค.
๋ง์ง๋ง cnt์ bridge_length๋ฅผ ๋ํ๋ ์ด์ ๋ ๋ง์ง๋ง ํธ๋ญ์ ์ง๋์ break๊ฐ ๋ ์ํ์์ ๋ง์ง๋ง ํธ๋ญ์ด ๋ค ๋๋ฌํ๊ธฐ ์ํด์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ bridge_length๋งํผ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
import Foundation
func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
var q: [(Int, Int)] = []
var idx = 0
var sum = 0
var cnt = 0
while true {
// ์ธ๋ฑ์ค๊ฐ ํธ๋ญ์ ๊ฐ์๋ณด๋ค ์ปค์ง๋ฉด
if idx == truck_weights.count {
break
}
// ํ๊ฐ ๋น์ด์์ง ์๊ณ ๋ค์ด์จ ์๊ฐ์ด ๋ค๋ฆฌ๊ธธ์ด๊ฐ ๋๋ค๋ฉด ์ ๊ฑฐ
if let first = q.first, first.1 == bridge_length {
sum -= first.0
q.removeFirst()
}
// ํ์ฌ ํ์ ๋ฌด๊ฒ๋ฅผ ์ถ๊ฐํ์๋ ํ๊ณ๋ฌด๊ฒ๋ณด๋ค ์๋ค๋ฉด ์ถ๊ฐ
if sum + truck_weights[idx] <= weight {
sum += truck_weights[idx]
q.append((truck_weights[idx], 0))
idx += 1
}
// ํ ๊ฐ๊ฐ ํธ๋ญ์ ์๊ฐ์ด๋ฅผ ๋ํด์ฃผ๊ธฐ.
q = q.map{ ($0.0, $0.1+1) }
cnt += 1
}
cnt += bridge_length
return cnt
}
๋ค๋ฅธ ์ฌ๋์ ํ์ด
๋ค๋ฆฌ์ ๊ฐ์๋งํผ 0์ผ๋ก ์ด๊ธฐํํด์ค ๋ค ํธ๋ญ์ ๊ฐ์ด ๋ค์ด์ค๋ฉด appendํ๊ณ ๋ฌด๊ฒ์ ํ๋๋ฌธ์ ๋ค์ด์ฌ ์ ์๋ค๋ฉด 0์ ๋ฃ์ด์ค์ผ๋ก์จ ๋ค๋ฆฌ์ ์ํ๋ฅผ ์ถ์ํ์์ผ์ ํํํ ์ ์์๋ค.
์ฆ ์ฒซ ๋ฒ์งธ ํ ์คํธ์ผ์ด์ค๋ฅผ ๋ณด๋ฉด [7, 4, 5, 6]์ ๋ฐฐ์ด์์ ๋ค๋ฆฌ์๊ธธ์ด๊ฐ 2๊ธฐ๋๋ฌธ์ ์ด๋ ๊ฒ ํํํ ์ ์๋ค.
[0, 0] -> [0, 7] -> [7, 0] -> [0, 4] -> [4, 5] -> [5, 0] -> [0, 6] -> [6] -> []
์ด ๋ฌธ์ ์ ์จ๊ฒจ์ง ํต์ฌ์ trucks์ ํธ๋ญ์ด ์๋๋ฐ ๋ฌด๊ฒ๋๋ฌธ์ ๋ชป์ฌ๋ผ๊ฐ๋ ๊ฒฝ์ฐ์๋ง 0์ appendํ๋ ๊ฒ์ด๋ค.
์ฆ trucks์ ํธ๋ญ์ด ์๋ค๋ฉด 0์ ์ถ๊ฐํ์ง ์์์ผ๋ก์จ ๋ฐฐ์ด์ด Empty์ํ๋ก ๊ฐ ์ ์๊ฒ ๋ง๋๋ ๊ฒ์ด๋ค.
์ด๋ป๊ฒ ์ด๋ฐ ์๊ฐ์ ํ์๊น ์ ๊ธฐํ๋ค.. ์ง์ ํํ๋ก ์๊ฐ์ด๋ฅผ ๋ด์ ๋์ ๋ฌ๋ฆฌ 0์ผ๋ก ์ด๊ธฐํ๋ ๋ฐฐ์ด์ ์ด์ฉํด์ ๊ฑด๋๋ ๊ฒ์ ํํํ ๊ฒ ์ธ์๊น์๋ค.
import Foundation
func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
var bridge = Array(repeating: 0, count: bridge_length)
var trucks = truck_weights
var bridgeWeight = 0
var time = 0
// ๋ค๋ฆฌ๊ฐ ๋น์ด์์๋๊น์ง ์งํ
while !bridge.isEmpty {
time += 1
// ๋งจ ์์์๋ ํธ๋ญ์ ์ง์์ผ ๋ค๋ฆฌ์ ๋ฌด๊ฒ
bridgeWeight -= bridge.removeFirst()
if let t = trucks.first {
if t + bridgeWeight <= weight {
bridgeWeight += trucks.removeFirst()
bridge.append(t)
} else { //trucks์ ํธ๋ญ์ด ์๋๋ฐ ๋ฌด๊ฒ๋๋ฌธ์ ๋ชป์ฌ๋ผ๊ฐ๋ ๊ฒฝ์ฐ์ 0์ ์ถ๊ฐ.
bridge.append(0)
}
}
}
return time
}
'ํ๋ก๊ทธ๋๋จธ์ค-Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค - 2๊ฐ ์ดํ๋ก ๋ค๋ฅธ ๋นํธ (1) | 2022.10.22 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค - ๋ชจ์์ฌ์ (Swift) (0) | 2022.10.21 |
ํ๋ก๊ทธ๋๋จธ์ค - ํ์ผ๋ช ์ ๋ ฌ(Swift) (0) | 2022.10.21 |
ํ๋ก๊ทธ๋๋จธ์ค - ๋ฐฉ๋ฌธ ๊ธธ์ด(Swift) (0) | 2022.10.20 |
ํ๋ก๊ทธ๋๋จธ์ค - ์คํฌํธ๋ฆฌ(Swift) (0) | 2022.10.20 |