알고리즘 연습/구현, 문자열

[Lv.1 / 프로그래머스 / 파이썬] 동영상 재생기 (PCCP 기출문제 1번)

김세진 2024. 12. 18. 21:39
반응형

 

 

 

 

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

풀이

 

문자열로 주어진 모든 시간을 초 단위로 환산한 뒤, 계산이 전부 끝난 다음 다시 원래 포맷으로 변환시켜주는 방법을 사용하면 구현이 보다 편하다.

 

다시 문자열로 치환할 때 분 혹은 초 단위가 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}"

 

 

 

 

 

반응형