728x90
https://school.programmers.co.kr/learn/courses/30/lessons/72414
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🤔 문제분석
알아야할 개념
누적합
스트링 타입의 시간을 초 단위로 컨버팅 해주는 함수와, 시간을 스트링 시간으로 컨버팅 해주는 함수를 만들었다.
- 로그를 순회하면서 r_c 배열에 시작시간을 +1 끝나는시간을 -1을 해준다.
- 이제
누적합
을 이용해야하는데 p_s 배열에 r_c의 누적값을 저장한다.- p_s[end_time-1] - p_s[start_time] 값에 겹치는 로그의 총 개수를 리턴하게 된다.
- i는 0부터 play_time - adv_time을 두고, (i~adv_time) ~ (i ~ i + adv_time)를 순회하면서 가장 큰 값을 찾아낸다.
💻 코드
def solution(play_time, adv_time, logs):
def time_to_sec(time : str):
h, m, s = map(int, time.split(":"))
return h*3600 + m*60 + s
def sec_to_time(sec : int):
return f'{sec//3600:02d}:{sec%3600//60:02d}:{sec%60:02d}'
play_time = time_to_sec(play_time)
adv_time = time_to_sec(adv_time)
p_s = [0] * (play_time + 1)
r_c = [0] * (play_time + 1)
for log in logs:
s, e = log.split("-")
s = time_to_sec(s)
e = time_to_sec(e)
r_c[s] += 1
r_c[e] -= 1
for i in range(1, play_time + 1):
r_c[i] += r_c[i-1]
p_s[i] = p_s[i-1] + r_c[i]
answer = max((p_s[start_time + adv_time - 1] - (p_s[start_time-1] if start_time - 1 > 0 else 0), -start_time)
for start_time in range(play_time - adv_time +1))
return sec_to_time(-answer[1])
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 동굴탐험 (0) | 2024.05.19 |
---|---|
[프로그래머스] [1차] 추석 트래픽 (0) | 2024.05.18 |
[프로그래머스] 합승 택시 요금 (0) | 2024.05.17 |
[프로그래머스] 튜플 (0) | 2024.05.15 |
[프로그래머스] 호텔 방 배정 (0) | 2024.05.15 |