๋ฌธ์ ์ค๋ช
ํธ๋ญ ์ฌ๋ฌ ๋๊ฐ ๊ฐ์ ๊ฐ๋ก์ง๋ฅด๋ ์ผ ์ฐจ์ ๋ค๋ฆฌ๋ฅผ ์ ํด์ง ์์ผ๋ก ๊ฑด๋๋ ค ํฉ๋๋ค. ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋ ค๋ฉด ์ต์ ๋ช ์ด๊ฐ ๊ฑธ๋ฆฌ๋์ง ์์๋ด์ผ ํฉ๋๋ค. ํธ๋ญ์ 1์ด์ 1๋งํผ ์์ง์ด๋ฉฐ, ๋ค๋ฆฌ ๊ธธ์ด๋ 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 |
100 |
100 |
[10] |
101 |
100 |
100 |
[10,10,10,10,10,10,10,10,10,10] |
110 |
2 |
10 |
[7,4,5,6] |
8 |
ํ์ด:
์ด๋ฒ ๋ฌธ์ ๋ ์คํ/ํ ๋ฌธ์ ์ ๋๋ค.
๋ฌธ์ ์ ํต์ฌ์ ์ ๊ฐ ์๊ฐํ์ ๋ ํธ๋ญ์ด ์ฌ๋ผํ ๋์ ์๊ฐ์ ๊ธฐ์ตํ๋ ๊ฒ์ธ๋ฐ์.
๋จผ์ ์๊ฐ์ ์ด ๋ณ์์ -> var time = 0
๋๊ธฐ์ค์ธ ํธ๋ญ์ ๋ํ๋ผ ๋ณ์ -> var wait = truck_weights
๋ฌด๊ฒ๋ฅผ ์ด ๋ณ์ -> var times = [Int]()
๊ฐ ํธ๋ญ์ด ๋ด๋ฆด ๋ ์๊ฐ์ ๋ด๋ ๋ณ์ -> var times = [Int]()
ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ๊ธฐ์ตํ ๋ณ์ -> var weights = [Int]()
์ด๋ฒ ๋ฌธ์ ๋ while๋ฌธ์ ์ฌ์ฉํด์ wait ์ฆ ๋๊ธฐ ์ค์ธ ํธ๋ญ์ด ์์ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค. ->while !wait.isEmpty{...}
๊ทธ๋ฆฌ๊ณ ์๊ฐ์ ๋ฐ๋ณต์ด ๋ ๋๋ง๋ค 1์ฉ ์ฆ๊ฐ์์ผ์ค๋๋ค. -> time += 1
๊ทธ ๋ค์ ์๊ฐ์ด ๋น์ด์์ง ์๋ค๋ฉด ์ฆ ์ฌ๋ผํ ํธ๋ญ์ด ์๋ค๋ฉด (์ ์ฌ๋ผํ ํธ๋ญ์ธ์ง๋ ๋ค์ ์ค๋ช ) -> if !times.isEmpty{...)
๋น์ด์์ง ์๊ณ ๋ง์ฝ ํ์ฌ ์๊ฐ์ด times(ํธ๋ญ์ด ๋ด๋ฆด ๋์ ์๊ฐ)๊ณผ ๊ฐ๋ค๋ฉด -> if time == times.first! {...}
times์์ ๋งจ ์ฒซ๋ฒ์งธ๋ฅผ ์ญ์ ํด์ฃผ๊ณ w์์ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ๋ด์ ๊ฒ (weights)์ค ๋งจ ์ฒซ๋ฒ์งธ๋งํผ ๋นผ์ฃผ๊ณ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ๋ด์ ๊ฒ(weights) ์ค ๋งจ ์ฒซ๋ฒ์งธ๋ฅผ ์ญ์ ํด์ค๋๋ค. -> times.removeFirst() w -= weights.first! weights.removeFirst()
๊ทธ ๋ค์ ๋ง์ฝ ๋ฌด๊ฒ๊ฐ ๋๊ธฐ ์ค์ธ ํธ๋ญ์ด ๋ค์ด์๋ ๋ฒํธ ์ ์๋ ๋ฌด๊ฒ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด -> if w+wait.first! <= weight{...}
w์ ๋๊ธฐ์ค์ธ ํธ๋ญ์ ๋งจ ์ฒซ๋ฒ์งธ ๋ฌด๊ฒ๋ฅผ ๋ํด์ฃผ๊ณ -> _> w += wait.first!
weights๋ฐฐ์ด์ ๋๊ธฐ์ค์ธ ํธ๋ญ์ ๋งจ ์ฒซ๋ฒ์งธ ๋ฌด๊ฒ๋ฅผ ๋ฃ์ด์ฃผ๊ณ -> weights.append(wait.first!)
times์ ํ์ฌ์๊ฐ์ ๋ค๋ฆฌ๊ธธ์ด๋ฅผ ํฉ์น (์ด๊ฒ ๋ฐ๋ก ํธ๋ญ์ด ๋ด๋ฆด ์๊ฐ์ ๋๋ค. ) ๋ฃ์ด์ค๋๋ค. -> times.append(time+bridge_length)
๊ทธ ๋ค์ ๋๊ธฐ์ด์์ ๋งจ ์ฒซ๋ฒ์งธ ํธ๋ญ์ ์ญ์ ํด์ค๋๋ค. -> wait.removeFirst()
์ด๋ ๊ฒ wait๊ฐ ๋ชจ๋ ๋ค ์์ด์ง ๋๊น์ง ๋ฐ๋ณตํ๋ฉด times์ ๋ง์ง๋ง์ผ๋ก ์ฌ๋ผํ ํธ๋ญ์ด ๋ด๋ฆด ์๊ฐ๋ง ๋จ๊ฒ ๋ฉ๋๋ค. ์ฆ ๋ชจ๋ ํธ๋ญ์ด ๋ด๋ฆฐ ๋ค ์๊ฐ์ ๋๋ค. ๊ณ ๋ก ์๊ฐ์ ๋ด์ times ๋ฐฐ์ด์ ๋งจ ๋ง์ง๋ง๋ฒ ์งธ๋ฅผ ๋ฐํํด์ค๋๋ค. -> return times.last!
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
|
import Foundation
func solution(_ bridge_length:Int, _ weight:Int, _ truck_weights:[Int]) -> Int {
var time = 0
var wait = truck_weights
var w = 0
var times = [Int]()
var weights = [Int]()
while !wait.isEmpty{
time += 1
if !times.isEmpty{
if time == times.first! {
times.removeFirst()
w -= weights.first!
weights.removeFirst()
}
}
if w+wait.first! <= weight{
w += wait.first!
weights.append(wait.first!)
times.append(time+bridge_length)
wait.removeFirst()
}
}
return times.last!
}
|
'๐ Problem Solution > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค ๋ฉ์ฉกํ ์ฌ๊ฐํ Swift (0) | 2020.03.21 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค ํ Swift (0) | 2020.03.19 |
ํ๋ก๊ทธ๋๋จธ์ค ํ๋ฆฐํฐ Swift (0) | 2020.03.11 |
2018 KAKAO BLIND RECRUITMENT [1์ฐจ] ๋คํธ๊ฒ์ (0) | 2020.03.06 |
2019 KAKAO BLIND RECUITMENT ์คํจ์จ Swift (0) | 2020.03.05 |
๋๊ธ