[프로그래머스 LV3] 추석 트래픽

Junyoung Park·2022년 8월 14일
0

코딩테스트

목록 보기
560/631
post-thumbnail

1. 문제 설명

추석 트래픽

2. 문제 분석

응답 완료 시간 및 작업 시간을 밀리 초 단위로 환산한 레코드를 만든 뒤, 해당 레코드 내 시작/끝 시간의 간격이 전체 레코드 상에서 겹치는 가장 많은 부분을 카운트했다.

  • 문자열 파싱 이후 특정한 숫자로 조작하는 데 익숙해져야 한다. 실수 단위라면 정수 단위로 할 수 있도록 10의 배수를 곱해서 계산하자!

3. 나의 풀이

import Foundation

func solution(_ lines:[String]) -> Int {
    var records = [(Int, Int)]()
    for line in lines {
        let line = line.split(separator: " ").map{String($0)}
        let S = line[1]
        var T = line[2]
        T.removeLast()
        let replyTime = convertTime(S)
        let taskTime = Int(Double(T)! * 1000.0)
        
        let end = replyTime
        let start = replyTime - taskTime + 1
        let record = (start, end)
        records.append(record)
    }
    
    var maxCount = 0
    
    for record in records {
        let start = record.0
        let end = record.1
        
        let startCount = getCount(start, records)
        let endCount = getCount(end, records)
        maxCount = max(maxCount, startCount, endCount)
    }
    return maxCount
}

func getCount(_ point: Int, _ records: [(Int, Int)]) -> Int {
    var count = 0
    for record in records {
        let start = record.0
        let end = record.1
        if start < point + 1000 && point <= end {
            count += 1
        }
    }
    return count
}

func convertTime(_ time: String) -> Int {
    let time = time.split(separator: ":")
    var times:Double = 3600000.0
    var total:Double = 0.0
    
    for t in time {
        total += times * Double(t)!
        times /= 60.0
    }
    return Int(total)
}
profile
JUST DO IT

0개의 댓글