Problem
Solution
ํด๋น ๋ฌธ์ ๋ ์ด์งํ์์ ์ด์ฉํด์ ํ์ด์ผ ํ๋ ๋ฌธ์ ์ ๋๋ค.
์ต๋๋ก ๊ฑธ๋ฆด ์๊ฐ์ ๋ฐ์ผ๋ก ๋๋ ๊ฐ๋ฉด์ ๊ธ๊ณผ ์์ ์ด๋ฐํ ์ ์๋์ง๋ฅผ ํ์ธํ๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค.
1. ์ต๋๋ก ๊ฑธ๋ฆด ์๊ฐ์ ๊ตฌํ๋ค.
์๋ ์ ํ์ฌํญ์ ์ฐธ๊ณ ํ๋ฉด a์ b์ ์ต๋์น๊ฐ ๊ฐ ๊ฐ 10์ 9์น์ด๋ฏ๋ก 10์ 9์น * 2
์์ง์ด๋๋ฐ ์ต๋๋ก ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด 10์ 5์น์ด๊ณ ์๋ค ๊ฐ๋ค ์๋ณต์ด๋ฏ๋ก 10์ 5์น *2
์ฆ, 10e9 * 10e5 * 4์ ๋๋ค.
2. ์ด์ง ํ์์ ์ด์ฉํ์ฌ ๋ฐ์ผ๋ก ๋๋๋ฉด์ ๊ด๋ฌผ์ ์ด๋ฐํ ์ ์๋์ง ํ์ธํ๋ค.
๊ด๋ฌผ์ ์ด๋ฐํ ์ ์๋์ง๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ ํธ๋ญ์ ๊ด๋ฌผ์ ํฉ์ ์ต๋์น๊ฐ ๋ชจ๋
a(ํ์ํ ๊ธ์ ์),b(ํ์ํ ์์ ์),a+b(ํ์ํ ๊ธ๊ณผ ์์ ํฉ)๋ณด๋ค ํฌ๋ฉด ๋ฉ๋๋ค. (์ฌ๊ธฐ ํด์ค์์ ์์ธํ ์ค๋ช ์ด ๋์์์ต๋๋ค.)
๊ฐ ํธ๋ญ์ ๊ด๋ฌผ์ ์๊ณผ (์๊ฐ ๋ด์ ์ด๋ฐํ ์ ์๋ ํ์ * ๋ฌด๊ฒ์์ )์ ๋น๊ตํด์ ๋ ์์ ์ชฝ์ด ์ต๋์น๊ฐ ๋ฉ๋๋ค.
์ด๋ ๊ฒ ์ด์ง ํ์์ ์ด์ฉํด์ ๊ด๋ฌผ์ ์ด๋ฐํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
Source Code
1์ฐจ ํ์ด
์ฒซ ํ์ด๋ ์๋์ ๊ฐ์ด ์๊ฐ์ 1์ด๋ถํฐ ์ธ๋ฉด์ ์ํ๋ ๊ฒฐ๊ณผ ๊ฐ์ด ๋์์ ๋ ๋ฆฌํดํ๋๋ก ํ๋ค.
๊ฒฐ๊ณผ๋...ํ๋ ๋บด๊ณ ์คํจ (signal: illegal instruction (core dumped)) ๋ผ๊ณ ๋ด๋ค...
๋ญ... ์๊ฐ์ด๊ณผ๊ฐ ๊ฑธ๋ฆฌ๋ ๊ฒ๋ ์๋๊ณ ๋ค ์์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ ์ ๋นํฉํ๋ค..
import Foundation
struct Truck {
var gold:Int
var silver:Int
var weight:Int
var time:Int64
}
func solution(_ a:Int, _ b:Int, _ g:[Int], _ s:[Int], _ w:[Int], _ t:[Int]) -> Int64 {
var gold:Int = a
var silver:Int = b
var time:Int64 = 0
var waitingTrucks:[Int64:[Truck]] = [:]
for (i,time) in t.enumerated() {
if waitingTrucks[Int64(time)] == nil {
waitingTrucks[Int64(t[i])] = [Truck(gold: g[i], silver: s[i], weight: w[i], time: Int64(t[i]))]
}else {
waitingTrucks[Int64(time)]!.append(Truck(gold: g[i], silver: s[i], weight: w[i], time: Int64(t[i])))
}
}
while true {
time += 1
if waitingTrucks[time] != nil {
for truck in waitingTrucks[time]! {
var newTruck:Truck = truck
var weight:Int = truck.weight
if gold > 0 {
gold -= truck.gold > 0 ? truck.gold > weight ? weight : truck.gold : 0
if truck.gold > 0 {
weight = gold < 0 ? weight + gold : weight - truck.gold
}
newTruck.gold -= weight
gold = gold < 0 ? 0 : gold
}
if weight > 0 {
silver -= truck.silver > 0 ? truck.silver > weight ? weight : truck.silver : 0
newTruck.silver -= weight
}
if waitingTrucks[time + truck.time*2] == nil {
waitingTrucks[time + truck.time*2] = [newTruck]
}else {
waitingTrucks[time + truck.time*2]!.append(newTruck)
}
if gold <= 0 && silver <= 0 {
return time
}
}
}
}
}
๋๋์
์ด๋ฒ ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋จผ์ ์์ ์ธ์ฐ๊ณ ํธ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ๋๊ผ๋ค...
1์ฐจ ํ์ด๋ฅผ ํ๊ณ ๋์ ํ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ํธ๋์ง ๋ชจ๋ฅด๊ฒ ์ด์ ํด์ค์ ๋ดค๋๋ฐ ์ด๋ถํ์์ด๋ผ๋ ํค์๋๊ฐ ์์๋ค.
ํ์ง๋ง ์ด๋ถํ์์ด๋ผ๋ ํค์๋๋ฅผ ์๊ณ ๋์๋ ๊ธ๊ณผ ์์ ์ด๋ฐํ๋ ์ ์์ฒด๋ฅผ ๋ ์ฌ๋ฆฌ๊ธฐ๊ฐ ํ๋ค์ด์ ๋ํํ ๋
๊ฝค ์ด๋ ค์ด ๋ฌธ์ ์๋ค...
Reference
๋๊ธ