
Problem
์ฝ๋ฉํ ์คํธ ์ฐ์ต - [1์ฐจ] ์ถ์ ํธ๋ํฝ
์ ๋ ฅ: [ "2016-09-15 20:59:57.421 0.351s", "2016-09-15 20:59:58.233 1.181s", "2016-09-15 20:59:58.299 0.8s", "2016-09-15 20:59:58.688 1.041s", "2016-09-15 20:59:59.591 1.412s", "2016-09-15 21:00:00.464 1.466s", "2016-09-15 21:00:00.741 1.581s", "2016-09-1
programmers.co.kr
Solution
1. ์์ฒญ์ด ๋๋๋ ์๊ฐ์ ๊ตฌํ๋ค.
split์ ์ด์ฉํด ์ฃผ์ด์ง ์์ฒญ๋ค์ ๊ฐ ์๊ฐ,๋ถ,์ด๋ฅผ ๊ตฌํด ๋ชจ๋ ์ด๋ก ํ์ฐํด์ค.
(calculateEndTime ํจ์๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!)
2. ์์ฒญ์ด ์์๋๋ ์๊ฐ์ ๊ตฌํ๋ค.
์์ฒญ์ด ๋๋๋ ์๊ฐ์ ์ฒ๋ฆฌ ์๊ฐ์ ๋นผ์ ์์๋๋ ์๊ฐ์ ๊ตฌํด์ค๋ค.
(calculateStartTime ํจ์๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!)
3. ์์ฒญ์ ์์๊ณผ ๋์ ๋ชจ์์ค๋ค.
์์ฒญ๋ค์ ์์๊ณผ ๋ ์๊ฐ์ +1์ ํํ๋ก ๋ง๋ค์ด์ฃผ๊ณ ๋ฐฐ์ด์ ๋ชจ์์ค๋ค.
๋ ์๊ฐ์ +1์ ํด์ฃผ๋ ์ด์ ๋ n~n+1์ด์ ์๋ ์์ฒญ ๊ฐฏ์๋ฅผ ๊ตฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
(appendRequests ํจ์๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!)
4. ์ต๋ ์์ฒญ ๊ฐฏ์๋ฅผ ๊ตฌํด์ค๋ค.
์์ฒญ๋ค์ ์ํํ๋ฉด์ ํ์ฌ ์ธ๋ฑ์ค๋ณด๋ค ์ดํ ์์ฒญ๋ค๊ณผ ๋น๊ตํ์ฌ
ํ์ฌ์์ฒญ์ ๋ ์๊ฐ๋ณด๋ค ๋ค๋ฅธ ์์ฒญ์ ์์ ์๊ฐ์ด ๋ ์๋ค๋ฉด
์์ฒญ๋ค์ ์๋ฃ ์๊ฐ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋์ด์์ผ๋ฏ๋ก ๋ฌด์กฐ๊ฑด ํฌํจ๋๋ฏ๋ก ๊ฐฏ์๋ฅผ ๋ํด์ค๋ค.
(findMaxRequestCount ํจ์๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!)
Source Code
import Foundation | |
func solution(_ lines:[String]) -> Int { | |
//์ต๋ ์์ฒญ์๊ฐ์ ๊ตฌํด ๋ฐํํด์ค. | |
return findMaxRequestCount(requests: appendRequests(lines: lines)) | |
} | |
//์์์๊ฐ์ ๊ตฌํจ. | |
func calculateStartTime(line:String,end:Float) -> Float { | |
//์ฒ๋ฆฌ์๊ฐ | |
var duringTime = line.split(separator: " ")[2] | |
//์ฒ๋ฆฌ์๊ฐ์์ s๋ฅผ ๋นผ์ค๋ค. | |
duringTime.removeLast() | |
//๋์๊ฐ์์ ์ฒ๋ฆฌ์๊ฐ์ ๋นผ๊ณ 0.001์ ๋ํด์ค. | |
return end - Float(duringTime)! + 0.001 | |
} | |
//๋์๊ฐ์ ๊ตฌํจ. | |
func calculateEndTime(line:String) -> Float { | |
//line์์ ์๊ฐ๋ง ๋ถ๋ฆฌํด์ค | |
let timeString = line.split(separator: " ")[1] | |
//์,๋ถ,์ด๋ก ๋๋ ์ค | |
let time = timeString.split(separator: ".")[0].split(separator: ":") | |
//์,๋ถ,์ด๋ฅผ ์ด๋ก ๋ณํ | |
let (h,m,s) = (Int(time[0])!*3600,Int(time[1])!*60,Int(time[2])!) | |
//์์์ | |
let decimalPoint = timeString.split(separator: ".")[1] | |
//์ด์ ์์์ ์ ํฉ์ณ์ ๋ฐํ | |
return Float("\((h+m+s)).\(decimalPoint)")! | |
} | |
//์์ฒญ์ ์์๊ณผ ๋์ ๋ชจ์์ค๋ค. | |
func appendRequests(lines:[String]) -> [(Float,Float)] { | |
//์์ฒญ์ ์์๊ณผ ๋์ ๋ด์ ๋ณ์ | |
var requests = [(Float,Float)]() | |
//lines์ ์ํ | |
lines.forEach{ | |
//์์ฒญ์ ๋์๊ฐ | |
let end = calculateEndTime(line: $0) | |
//์์ฒญ์ ์์์๊ฐ | |
let start = calculateStartTime(line: $0, end: end) | |
//์์๊ณผ ๋์ ํํ๋ก ๋ด์์ ๋ฃ์ด์ค. (end์๊ฐ์ 1์ ๋ํด์ฃผ๋ ์ด์ ๋ 1์ด๊ฐ์ ๊ฐฏ์๋ฅผ ๊ตฌํ๊ธฐ๋๋ฌธ) | |
requests.append((start,end + 1)) | |
} | |
//์์ฒญ์ ๋ฐํ | |
return requests | |
} | |
//์ต๋์์ฒญ๊ฐฏ์๋ฅผ ๊ตฌํจ. | |
func findMaxRequestCount(requests:[(Float,Float)]) -> Int { | |
//์์ฒญ๊ฐฏ์๋งํผ ๋ฐฐ์ด์ ๋ง๋ค์ด์ค. ์๊ธฐ ์์ ์ ํฌํจํ๋ 1์ ๋ฃ์ด์ค | |
var counts = Array(repeating: 1, count: requests.count) | |
//์์ฒญ๋ค์ ์ํ | |
for (i,request) in requests.enumerated() { | |
//์์ฒญ๋ค ์ค i๋ฒ์งธ ์ดํ๋ก ํ์ฌ ์์ฒญ์ ๋๋ณด๋ค ์์ ๊ฒ๋ค์ ๊ฐฏ์๋ฅผ ๋ํด์ค. | |
counts[i] += requests[(i+1)...].filter{request.1 > $0.0}.count | |
} | |
//๊ฐฏ์ ์ค ๊ฐ์ฅ ์ต๋๊ฐ์ ๋ฐํ | |
return counts.max() ?? 0 | |
} |
'๐ Problem Solution' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Baekjoon ํฐ ์ A + B 10757๋ฒ (0) | 2022.01.06 |
---|---|
[Swift] 2020 KAKAO BLIND RECRUITMENT ์ธ๋ฒฝ ์ ๊ฒ (0) | 2021.09.08 |
[Swift] 2020 KAKAO INTERNSHIP ํคํจ๋ ๋๋ฅด๊ธฐ (0) | 2021.05.08 |
[Swift] 2021 KAKAO BLIND RECRUITMENT ์นด๋ ์ง ๋ง์ถ๊ธฐ (1) | 2021.04.27 |
[Swift] 2021 KAKAO BLIND RECRUITMENT ๊ด๊ณ ์ฝ์ (0) | 2021.04.11 |
๋๊ธ