๐ ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ๋งํฌ
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
โ๐ป ๋ฌธ์ ํ์ด Github ๋งํฌ
-Swift-CodingTest/ํ๋ก๊ทธ๋๋จธ์ค/2/42583.โ ๋ค๋ฆฌ๋ฅผโ ์ง๋๋โ ํธ๋ญ at main · BaeJihae/-Swift-CodingTest
Swift๋ก ํผ ์ฝ๋ฉ ํ ์คํธ ๋ฌธ์ ๋ค์ ์ ๋ฆฌํ๊ณ ๊ณต๋ถํ๋ ๊ณต๊ฐ์ ๋๋ค. Contribute to BaeJihae/-Swift-CodingTest development by creating an account on GitHub.
github.com
๋ฌธ์ ์ค๋ช
ํธ๋ญ ์ฌ๋ฌ ๋๊ฐ ๊ฐ์ ๊ฐ๋ก์ง๋ฅด๋ ์ผ์ฐจ์ ๋ค๋ฆฌ๋ฅผ ์ ํด์ง ์์ผ๋ก ๊ฑด๋๋ ค ํฉ๋๋ค. ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ค๋ฉด ์ต์ ๋ช ์ด๊ฐ ๊ฑธ๋ฆฌ๋์ง ์์๋ด์ผ ํฉ๋๋ค. ๋ค๋ฆฌ์๋ ํธ๋ญ์ด ์ต๋ 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 count = 0
var truckWeights = truck_weights
var currentBridge = [Int](repeating: 0, count: bridge_length)
var currentBridgeSum = 0
while !truckWeights.isEmpty {
if currentBridgeSum + truckWeights[0] <= weight {
currentBridge.removeFirst()
currentBridgeSum -= currentBridge[0]
currentBridge.append(truckWeights[0])
currentBridgeSum += truckWeights[0]
truckWeights.removeFirst()
}else {
currentBridge.append(0)
currentBridge.removeFirst()
currentBridgeSum -= currentBridge[0]
}
count += 1
}
var numberOfZero = currentBridge.filter{ $0 == 0 }.count
if numberOfZero != bridge_length {
count += bridge_length
}
return count
}
์ด ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์ฒดํฌํด์ผํ ๊ฑด ์ด๋ฏธ ๋ค๋ฆฌ์ ์ฌ๋ผ๊ฐ ํธ๋ญ๊ณผ ํ์ฌ ๋ค๋ฆฌ์ ์ฌ๋ผ์์๋ ํธ๋ญ๋ค์ ๋ฌด๊ฒ, ํธ๋ญ์ด ์๋ฒฝํ๊ฒ ๋ค ์ด๋ํ ๋๊น์ง์ ํ์์ ๋๋ค.
์ฐ์ ํธ๋ญ๋ค์ ๋ฌด๊ฒ๊ฐ ๋ํ๋์๋ ๋ฐฐ์ด์ด ๋ค ๋น๋๊น์ง ๋ฐ๋ณต๋ฌธ์ ๋๋ ค์ผ๊ฒ ๋ค๋ผ๊ณ ์๊ฐํ๊ณ ํ์๋๋ฐ, ๋ง์ง๋ง ํธ๋ญ์ด ์ฌ๋ผ๊ฐ ํ์ ์์ง๊น์ง ๋ค๋ฆฌ๋ฅผ ๋น ์ ธ๋๊ฐ์ง ๋ชปํ ํธ๋ญ๋ค์ด ๋ค๋ฆฌ๋ฅผ ๋น ์ ธ๋๊ฐ๋๊น์ง์ ํ์๋ฅผ ๊ณ ๋ คํ์ง ์์ ํ์ด์์ต๋๋ค. ๊ทธ๋์ ๋ค๋ฆฌ์ ํธ๋ญ์ด ์ฌ๋ผ์์๋ค๋ฉด, ๋ง์ง๋ง ํธ๋ญ์ด ๋น ์ ธ๋๊ฐ๋๊น์ง์ ํ์์ธ ๋ค๋ฆฌ์ ๊ธธ์ด๋งํผ์ count์ ๋ํ์ฌ ํด๊ฒฐํด์ฃผ์์ต๋๋ค.
ํ์ฌ ๋ค๋ฆฌ์ ์ฌ๋ผ์์๋ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ๋น๊ตํ์ฌ ๋ค์ ํธ๋ญ์ด ๋ค๋ฆฌ์ ์ฌ๋ผ์ฌ ๊ฒฝ์ฐ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ๊ตฌ๋ถํ์ฌ ๋ก์ง์ ๊ตฌํํ์ต๋๋ค.
๋ค๋ฅธ ์ฌ๋ ํ์ด
import Foundation
func solution(_ ๋ค๋ฆฌ๊ธธ์ด: Int, _ ๋ฌด๊ฒ์ ํ: Int, _ ํธ๋ญ๋ค: [Int]) -> Int {
var ์งํ์๊ฐ = 0
var ๊ธฐ๋ค๋ฆฌ๋ํธ๋ญ๋ค = ํธ๋ญ๋ค
var ๋ค๋ฆฌ์์ํธ๋ญ๋ค = [Int]()
var ์งํ๊ฑฐ๋ฆฌ = [Int]()
let ์ถ๋ฐ: (Int) -> () = { i in ๋ค๋ฆฌ์์ํธ๋ญ๋ค.append(i) ; ์งํ๊ฑฐ๋ฆฌ.append(1) }
let ๋ค๋ฆฌ์๋ฌด๊ฒ์ํฉ = { ๋ค๋ฆฌ์์ํธ๋ญ๋ค.reduce(0) { $0 + $1 } }
let ๋์ฐฉ = {
let first = ์งํ๊ฑฐ๋ฆฌ.first ?? 0
if first > ๋ค๋ฆฌ๊ธธ์ด { ๋ค๋ฆฌ์์ํธ๋ญ๋ค.removeFirst(); ์งํ๊ฑฐ๋ฆฌ.removeFirst() }
}
let ์งํ = { ์งํ๊ฑฐ๋ฆฌ = ์งํ๊ฑฐ๋ฆฌ.map { $0 + 1 } ; ์งํ์๊ฐ += 1 }
while !๋ค๋ฆฌ์์ํธ๋ญ๋ค.isEmpty || !๊ธฐ๋ค๋ฆฌ๋ํธ๋ญ๋ค.isEmpty {
์งํ()
๋์ฐฉ()
if let first = ๊ธฐ๋ค๋ฆฌ๋ํธ๋ญ๋ค.first {
if ๋ค๋ฆฌ์๋ฌด๊ฒ์ํฉ() + first <= ๋ฌด๊ฒ์ ํ {
์ถ๋ฐ(๊ธฐ๋ค๋ฆฌ๋ํธ๋ญ๋ค.removeFirst())
}
}
}
return ์งํ์๊ฐ
}
ํ๊ธ๋ก ๋ณ์์ ํจ์๋ช ์ ์ ์๊ฒ ๋๋ฌด ๊ท์ฌ์์ ๊ฐ์ง๊ณ ์จ ํ์ด์ ๋๋ค.
์งํ๊ณผ ๋์ฐฉ์ ํจ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ ํ์ด๋ฅผ ํ์์ด์!
๋ค๋ฆฌ์ ๋ฌด๊ฒํฉ์ ๋งค๋ฒ reduce๋ก ํฉํ๋ ๋ถ๋ถ์์ ์คํ์๊ฐ์ ๋ญ๋นํ๋ ๊ฒ ๊ฐ์ ์์ฌ์ด ํ์ด์์ต๋๋ค.