본문 바로가기

알고리즘/카카오 HARD

추석 트래픽 (Level 3)

문제

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

 

응답 완료 시간(end)에 처리시간(th)을 이용하여 시작시간(start)을 구하였다.

시간은 '시:분:초'로 구성되어있어서 정수형으로 바꿔주었고 특히 '초'는 소수점 셋째 자리까지 있으므로 소수점을 떼기 위해 1000을 곱하였다.

그리고 log 배열에 [start, end]를 추가하였다.

 

처리량은 log 배열을 돌면서 계산하였다.

 

log의 원소를 x라고 할 때, x의 시작 시간과 x의 시작시간에 1000(앞에서 시간을 정수형으로 바꿀 때 소수점을 없애기 위해  1000을 곱해주었기 때문이다. 1초를 1000이라고 할 수 있다.)을 더한 시간 사이에 처리량을 구한다.

그리고 x의 끝 시간과 x의 끝 시간에 1000을 더한 시간 사이의 처리량을 구한다.

이 간격 사이에 겹쳐지는 로그들이 있는지 카운트를 세면 처리량을 구할 수 있다.

 

처리량을 구하는 함수는 로그의 시작 시간이 end보다 작고, 로그의 끝 시간이 start 보다 크거나 같은 경우 카운트를 하나 증가시키는 방식으로 구현되었다.

 

def solution(lines):

    def throughput(log, start, end):
        cnt = 0
        for x in log:
            if x[0] < end and x[1] >= start:
                cnt += 1
        return cnt

    answer = 0
    log = []

    for line in lines:
        date, time, th = line.split()
        hour, minute, sec = time.split(':')
        th = th[:-1]

        end = int((int(hour) * 3600 + int(minute) * 60 + float(sec)) * 1000)
        start = int(end - (float(th) * 1000) + 1)
        log.append([start, end])

    for x in log:
        answer = max(answer, throughput(log, x[0], x[0] + 1000), throughput(log, x[1], x[1] + 1000))

    return answer

 

총평

어려워서 다른 풀이 참고해서 풀었다. 어려워 어려워~

 

'알고리즘 > 카카오 HARD' 카테고리의 다른 글

불량 사용자 (Level 3)  (0) 2022.08.10
자물쇠와 열쇠 (Level 3)  (0) 2022.08.09