์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Figma
- Reduce
- Firestore CRUD
- ์ง๋ฒ๋ณํ
- ์๊ณ ๋ฆฌ์ฆ
- ios
- SWiFT
- Decodable
- Filter
- Cloud Firestore
- ExpressJS
- DispatchQueue
- RxSwift
- map
- AVAudioPlayer
- Codable
- CRUD
- ํ๋ก๊ทธ๋๋จธ์ค
- Mac
- Encodable
- mongoose
- Firestore
- String.Index
- ์ฑ๋์์ธ
- ์ฑ๋ง๋ค๊ธฐ
- Core Data
- MongoDB
- UIRefreshController
- nodejs
- components
- Today
- Total
Focus On Develop ๐ค๐ค
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ ๋ณธ๋ฌธ
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ
๋๋ฆฌ๋ฌ์ดํ 2020. 12. 27. 00:42<๋ฌธ์ >
<์ ๋ต์ง๊ธฐ>
๋๊ธฐํ๊ณ ์๋ ํธ๋ญ์ ๋ํด์ ์์๋๋ก bridge์ ์ง์ ์ ์๋ํด์ผ ํ๋๋ฐ, ๊ทธ ์กฐ๊ฑด์ด ์ง๊ธ ๋ด๊ฐ(๋๊ธฐํ๋ ์ฒซ๋ฒ์งธ ํธ๋ญ) bridge์ ์ฌ๋ผ๊ฐ๋ ๋ฌด๊ฒ๋ฅผ ๊ฒฌ๋ ์ ์๋? ๋ฅผ ๋ง์กฑํด์ผ ํ๋ค. ๋ง์ฝ ๊ฒฌ๋ ์ ์๋ค๋ฉด ์๋ก์ด ํธ๋ญ์ ์ง์ ์ํค๊ณ , ๊ฒฌ๋ ์ ์๋ค๋ฉด ๋น์นธ์ ํ์นธ ๋ณด๋ธ๋ค. (๋ค๋ฆฌ๊ฐ ๊ฐ๋ ์ฐผ์ ๊ฒฝ์ฐ ๊ฐ์ฅ ์์ ์๋ ํธ๋ญ์ ํ์ถ์ํค๊ธฐ ์ํด ์ผ๋ง๋งํผ ์ด๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ๋น์นธ์ ๋ณด๋ด์ผ ํ๋ค.. ์ด๋ ๊ฒ ๋น์นธ์ ๋ณด๋ด์ฃผ์ง ์๊ณ ์ผ๋ง๋งํผ ์ด๋ํ๋์ง ์์น๋ฅผ ์๊ธฐ ์ํด์๋ ํธ๋ญ์ ๋ฌด๊ฒ์ ํ์ฌ์์น๋ฅผ Property๋ก ๊ฐ์ง๋ struct๋ฅผ ์์ฑํด์ผ ํ ๊ฒ๊ฐ๋ค..๐ญ) ๋์์ ์ด๋ ์งํ์๊ฐ์ 1์ด์ฉ ๋ํด์ค์ผ ํ๋ค. ์ด ๊ณผ์ ์ ๋๊ธฐํ๋ ํธ๋ญ์ด ์์ด์ง๋๊น์ง ๋ฐ๋ณต์์ผ์ค๋ค!
<์ฝ๋>
import Foundation
func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
var bridge: [Int] = []
var curWeight = weight
var time: Int = bridge_length
for truck in truck_weights {
while true {
if bridge.count == bridge_length {
if let firstTruck = bridge.first {
curWeight += firstTruck
bridge.removeFirst()
}
} else {
if curWeight < truck {
bridge.append(0)
time += 1
} else {
bridge.append(truck)
time += 1
curWeight -= truck
break
}
}
}
}
return time
}
<Lesson Learned>
์ ์ถํ๋๋ฐ ์ค๋ต.. ์?? ๋ฌด์จ์ผ์ด์ง..?? ํ๋ฉด์ ๊ณฐ๊ณฐํ ๋ณด๋๋ฐ.. ์ ๋ต์ง ๋๋ก ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋๋ ์ ์ผ '๋ง์ง๋ง'์ ๋ค์ด๊ฐ ํธ๋ญ์ด ๋ง์ฝ์ด์๋ค.. ์๊ณ ๋ฆฌ์ฆ๋๋ก๋ฉด ๋ง์ง๋ง ํธ๋ญ์ด ์ง์ ํ๋ฉด (๋๊ธฐํ๋ ํธ๋ญ์ด ์์ผ๋ฉด) ์ด๋์ ์๋ฃํ๋ค๊ณ ๊ฐ์ฃผํ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋.. ๋ง์ง๋ง ํธ๋ญ์ bridge์ ์ง์ ํ์ ๋ฟ ํ์ถ์ ํ์ง ๋ชปํ๋ค๋๊ฑฐ.. ใ ใ ใ (์ฌ๊ธฐ์ ์๊ฐ ์ด๊ธฐ๊ฐ์ด ๋น์ฐํ 0์ด์์ ๐ญ) ๊ทธ๋์.. ๊ทธ๋ฅ ๋ฃจํ ์ดํ์ bridge๊ฐ ๋น๋๊น์ง ํ๋์ฉ ์ง์์ฃผ๋ฉด์ ์๊ฐ์ ๋ํด๋ฒ๋ฆด๊น? ํ๋ค๊ฐ.. ์๊ฐํด๋ณด๋ time์ ์ด๊ธฐ๊ฐ์ 0์ด์๋ ๋ค๋ฆฌ์ ๊ธธ์ด๋งํผ์ผ๋ก ์ค์ ํ๋ฉด, ๋ง์ง๋ง์ ํธ๋ญ์ด ์ด๋ํ๋ ์๊ฐ๋งํผ ๋ํด์ง ์ ์๋ ๋์์ ๋ถํ์ํ ๋ฃจํ(๋ค๋ฆฌ ๊ธธ์ด๋งํผ)๋ฅผ ๋์ง ์์๋ ๋๋ค!! ๊ทธ๋ฆฌ๊ณ .. ๊ทธ์์ค์ ๋ ํ๋ ๋ค๋ฅธ์ฌ๋์ ํ์ด๋ฅผ ์ฐธ๊ณ ํด์ ๋ฌธ์ ํ๋ ์ฐธ๊ณ ํ ๋งํ ๊ธฐ๋ฒ์ ๋ฐฐ์์ ๋ฐ์ทํด์๋ค.
func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
var trucks = truck_weights
var bridge = Array(repeating: 0, count: bridge_length)
var sec = 0
var w = 0
while bridge.isEmpty == false {
// 1์ด๋ง๋ค ๋ค๋ฆฌ์์ ํธ๋ญ ๋๋ ๋น๊ณต๊ฐ์ ์์ง์
w -= bridge.removeFirst()
sec += 1
// ๋ค๋ฆฌ์ ๋น ๊ณต๊ฐ ์์ผ๋ฉด
if bridge.count < bridge_length {
// ๋ค๋ฆฌ์ ์ง์
์์ ์ธ ํธ๋ญ์ ํฌํจํ ๋ฌด๊ฒ์ ๋ค๋ฆฌ๊ฐ ๊ฒฌ๋ ์ ์๋ ๋ฌด๊ฒ๋ฅผ ๋น๊ตํด์
// ๊ฒฌ๋ ์ ์์ผ๋ฉด ํธ๋ญ ์ง์
์ํจ๋ค.
if let t = trucks.first {
if t + w <= weight {
w += trucks.removeFirst() // ํธ๋ญ ์ง์
bridge.append(t) // ํธ๋ญ ์ง์
์๋ฃ
} else {
// ๊ฒฌ๋ ์ ์
์ผ๋ฉด ํธ๋ญ ๋๊ธฐํ๊ณ ๋น๊ณต๊ฐ๋ง ๋ณด๋ธ๋ค.
bridge.append(0)
}
}
}
}
return sec
}
์ ์ฒด์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๋ ผ๋ฆฌ๋ ๊ฑฐ์ ๋์ผํ๋ฐ, ์ด ๋ถ์ ์ด๊ธฐ์ ๋ค๋ฆฌ์ ๊ธธ์ด๋ฅผ ์ ๋ ฅ๋ฐ์ ๊ธธ์ด๋งํผ ๊ณ ์ ์ ์ผ๋ก ์ ํด๋๊ณ ์์ํ๋ค! ๋๋ ์์งํ ์ด๋ฐ ์๊ฐ์ ์์ ๋ชปํ๊ณ , ํ๋์ฉ ๋ฃ๊ณ ๋นผ๊ณ ํ ์๊ฐ๋ฐ์ ๋ชปํ์.. ๐ ์ด๋ ๊ฒ ์๊ฐํ๊ณ ํ๋ ์ ์ผ ์์ ์๋ ๊ฒ(ํธ๋ญ or ๋น์นธ)์ ๋ฌด์กฐ๊ฑด ๋นผ๊ณ ์์ํด๋ ๋๋, ๊ทธ๋ฆฌ๊ณ bridge๊ฐ ๋น์ด์์ ๋ฆฌ๊ฐ ์๋ค๋ ๊ฐ๋ ฅํ ๊ฐ์ ์ด ์๊ฒจ์, ํจ์ฌ ๋ช ํํ๊ณ ๊ฐ๋จํ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ ๊ฒ ๊ฐ๋ค. ์๋ฌดํผ ์ด๋ฒ์ ์ฌ๊ธฐ์ ๋ฐฐ์ด๊ฑด ๋ฐฐ์ด์ ์์๋ถํฐ ์ฑ์ธ ํ์๊ฐ ์๊ณ , ๋ฏธ๋ฆฌ ์๋ฏธ์๋ ๊ฐ์ผ๋ก ์ค์ ํด๋๊ณ ์์ํ๋ ๊ฒ๋ ํ๋์ ๋ฐฉ๋ฒ์ด๋ผ๋ ๊ฒ์ด๋ค~!!๐
์ถ์ : ํ๋ก๊ทธ๋๋จธ์ค ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ
'iOS [Swift] > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] H-Index (0) | 2020.12.28 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ธฐ๋ฅ๊ฐ๋ฐ (0) | 2020.12.27 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํฐ ์ ๋ง๋ค๊ธฐ (0) | 2020.12.23 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์คํฌํธ๋ฆฌ (0) | 2020.12.23 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ฐ (0) | 2020.12.21 |