반응형
풀이
문자열로 주어진 모든 시간을 초 단위로 환산한 뒤, 계산이 전부 끝난 다음 다시 원래 포맷으로 변환시켜주는 방법을 사용하면 구현이 보다 편하다.
다시 문자열로 치환할 때 분 혹은 초 단위가 10 미만일 때에도 두 자리수로 표현해야 함에 유의해야 한다.
그리고 사용자의 입력 타이밍과 상관 없이 현재 시간이 오프닝 사이에 위치하게 되면 오프닝의 끝으로 이동하게 된다. 따라서 사용자 입력 전후로 체크해주도록 하자.
def solution(video_len, pos, op_start, op_end, commands):
# 전부 초 단위로 치환
video_len = to_seconds(video_len)
pos = to_seconds(pos)
op_start = to_seconds(op_start)
op_end = to_seconds(op_end)
for comm in commands:
# 오프닝 체크
if pos >= op_start and pos <= op_end:
pos = op_end
if comm == 'next':
pos = min(pos+10, video_len)
elif comm == 'prev':
pos = max(pos-10, 0)
# 오프닝 체크
if pos >= op_start and pos <= op_end:
pos = op_end
return convert(pos)
def to_seconds(video):
m, s = map(int, video.split(":"))
return m*60 + s
def convert(seconds):
m = str(seconds//60)
if len(m) < 2:
m = "0" + m
s = str(seconds%60)
if len(s) < 2:
s = "0" + s
return m + ":" + s
포매팅 하는 방법이 생각나지 않아 convert 함수를 무작정 위같이 짰는데, 아래와 같이 작성하는 것이 더 바람직하겠다.
def convert(seconds):
# f"{value:02}"는 항상 두 자리 이상의 수를 출력한다.
return f"{seconds // 60:02}:{seconds % 60:02}"
반응형
'알고리즘 연습 > 구현, 문자열' 카테고리의 다른 글
[Lv.1 / 프로그래머스 / 파이썬] 카드 뭉치 (0) | 2024.08.30 |
---|---|
[Lv.1 / 프로그래머스 / 파이썬] 둘만의 암호 (0) | 2024.07.09 |
[Lv.2 / 프로그래머스 / 파이썬] 다음 큰 숫자 (0) | 2024.06.08 |
[Lv.1 / 프로그래머스 / 파이썬] 대충 만든 자판 (0) | 2024.05.15 |
[🥈2 / 백준 5555 / 파이썬] 반지 (0) | 2024.04.12 |