๋ฌธ์ ์ค๋ช
๋ฌธ์ ํ์ด
์ถฉ์คํ ๊ตฌํํ๋ฉด ๋๋ ๋ฌธ์ ๋ค.
์ ์ํด์ผ ํ ์ ์
1. ๋ง์ง๋ง์ ๋๊ฐ์ง ์์ ์ฐจ๋ 23:59๋ถ์ ์ถ์ฐจํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค.
2. ์ด๊ณผ์๊ฐ ๊ณ์ฐํ ๋ ์ฌ๋ฆผํ๋ค. ex) 40๋ถ ์ด๊ณผํ๋๋ฐ 30๋ถ๋ง๋ค 1000์ ์ถ๊ฐ๋ฉด 2000์ ์ถ๊ฐ
๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
[Int: (isOut: Bool, time: Int)]
[์ฐจ๋ฒํธ: (๋๊ฐ๋์ง, ์ฌ์ฉ์๊ฐ)]
๋ง์ง๋ง์ ๋๊ฐ๋์ง ์ฒดํฌํ๊ธฐ ์ํด ๋์ ๋๋ฆฌ์ value์ isOut์ ์ถ๊ฐํ ํํ๋ค.
records๋ฅผ ๋ค ์ฒดํฌํ๊ณ ๋ง์ฝ์ ์์ง ์๋๊ฐ ์ฐจ๊ฐ ์๋ค๋ฉด(isOut์ด false์ด๋ฉด)
23:59๋ถ์ ๋๊ฐ๋ค๊ณ ๊ฐ์ฃผํ๊ณ ์๊ฐ์ ๊ณ์ฐํ๋ค.
๊ทธ ๋ค์์ ์ฐจ๋ฒํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ๊ณ ์๊ธ ๊ณ์ฐํด์ฃผ๋ฉด ๋๋ค.
์๊ฐ์ ๋ถ์ผ๋ก ๊ณ์ฐํ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
ex) 01:10์ด๋ฉด 70 ๋ฆฌํดํด์ค
์ฝ๋
import Foundation
func solution(_ fees:[Int], _ records:[String]) -> [Int] {
// ์๊ฐ์ ๋ถ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ๋ฉ์๋ ex) 01:10 -> 70
func timeToMinute(_ time: String) -> Int {
let split = time.split(separator: ":").map {Int(String($0))!}
return 60*split[0] + split[1]
}
// [์ฐจ๋ฒํธ: (๋๊ฐ๋์ง, ์ฌ์ฉ์๊ฐ)]
var dict: [Int: (isOut: Bool, time: Int)] = [:]
for record in records {
let split = record.split(separator: " ").map {String($0)}
let time = split[0]
let carNumber = Int(split[1])!
// ์ฐจ๊ฐ ๋ค์ด์ค๋ฉด
if split[2] == "IN" {
if dict[carNumber] == nil {
dict[carNumber] = (false, timeToMinute(time))
}
else {
let usageTime = dict[carNumber]!.time + timeToMinute(time)
dict[carNumber] = (false, usageTime)
}
}
// ์ฐจ๊ฐ ๋๊ฐ๋ฉด isOut true๋ก ๋ณ๊ฒฝ
else if split[2] == "OUT" {
let usageTime = dict[carNumber]!.time - timeToMinute(time)
dict[carNumber] = (true, usageTime)
}
}
// ์์ง ์๋๊ฐ ์ฐจ๊ฐ ์๋ค๋ฉด 23:59๋ถ์ ๋๊ฐ๋ค๊ณ ๊ฐ์
for (key, value) in dict {
if !dict[key]!.isOut {
let usageTime = dict[key]!.time - timeToMinute("23:59")
dict[key] = (false, usageTime)
}
}
// ์ฐจ ๋ฒํธ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
let dictSorted = dict.sorted { $0.key < $1.key }
var answer: [Int] = []
for (key, value) in dictSorted {
let time = value.time*(-1)
// ๊ธฐ๋ณธ ์๊ฐ์ ๋๊ธฐ์ง ์์์ผ๋ฉด ๊ธฐ๋ณธ ์๊ธ๋ง
if time <= fees[0] {
answer.append(fees[1])
}
// ๊ธฐ๋ณธ ์๊ฐ์ ๋๊ฒผ๋ค๋ฉด
else {
let c = ceil((Float(time)-Float(fees[0])) / Float(fees[2]))
let money = fees[1] + Int(c)*fees[3]
answer.append(money)
}
}
return answer
}
ํ๊ธฐ
ํ์ด์๊ฐ: 1์๊ฐ
๊ทธ๋ฅ ๊ตฌํํ๋ฉด ๋๋ ๋ฌธ์ ์ธ๋ฐ ์ค๋ ๊ฑธ๋ ธ๋ค..
๋๋๊ณ ์ฌ๋ฆผ์ ceil, ๋ฐ์ฌ๋ฆผ round, ๋ด๋ฆผ์ floor ์ธ์ฐ์
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 20057] ๋ง๋ฒ์ฌ ์์ด์ ํ ๋ค์ด๋ - swift (0) | 2023.11.16 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค 92342] ์๊ถ ๋ํ swift (1) | 2023.11.08 |
[ํ๋ก๊ทธ๋๋จธ์ค 92335] k์ง์์์ ์์ ๊ฐ์ ๊ตฌํ๊ธฐ swift (0) | 2023.10.30 |
[ํ๋ก๊ทธ๋๋จธ์ค 150370] ๊ฐ์ธ์ ๋ณด ์์ง ์ ํจ๊ธฐ๊ฐ swift (1) | 2023.10.28 |
[ํ๋ก๊ทธ๋๋จธ์ค 150369] ํ๋ฐฐ ๋ฐฐ๋ฌ๊ณผ ์๊ฑฐํ๊ธฐ swift (0) | 2023.10.28 |