문제
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 |