프로그래머스 : 추석 트래픽

Sung Dong Kim·2021년 12월 28일
0

BOJ

목록 보기
6/6

[문제]

https://programmers.co.kr/learn/courses/30/lessons/17676

처리 완료 날짜, 시각, 처리시간으로 이루어진 로그 파일을 받아 초당 최대 처리량을 구해내는 문제이다.

초당 최대 처리량은 처리량이 가장 많았던 1초를 뜻하는 것으로 보인다.

파싱 문제인 것 같다.

[풀이]

def timestamp_to_seconds(timestamp):
    h, m, s = map(float, timestamp.split(':'))
    return h*3600 + m*60 + s

def parse_line(line):
    timestamp, length = line.split()[1:]
    length = float(length[:-1])
    seconds = timestamp_to_seconds(timestamp)
    return [round(seconds-length+0.001, 3), seconds]

def solution(lines):
    answer = 0
    
    newlines = list(map(parse_line, lines))
    
    for i, (start, end) in enumerate(newlines):
        tmp = 1
        for j, (a, b) in enumerate(newlines):
            if b < end or a >= end+1 or i==j: continue
            tmp += 1
        answer = max(tmp, answer)
        
    
    return answer

우선 hh:mm:ss.sss 형식의 문자열을 초로 환산한 timestamp_to_seconds 함수와
로그 한 줄 전체를 [시작시각, 끝시각]의 리스트로 만들어주는 parse_line 함수를 만들어 주었다.

이 둘을 이용해 로그들의 리스트를 [ [시작시각, 끝시각], ....] ] 형태의 리스트로 변경해주었다.

정렬을 해준다면 시간이 줄지만 귀찮아서 이중포문으로 돌아 조건에 맞으면 정답에 포함하는 식으로 답을 구하였다.

조건을 만들 때 어디가 <=, >= 이고 어디가 <, > 인지 헷갈려 시간을 많이 소비한 것 같다.


대단한 알고리즘이 필요한 문제일 줄 알았는데 문제, 입력 형식, 답이 되는 조건(?)을 잘 이해해야 하는 문제였던 것 같다.
profile
notion으로 이사갔어요

0개의 댓글