본문 바로가기
작업/Problem Solving

프로그래머스 PCCP 기출문제 (동영상 재생기) - Python3

728x90

 

 

프로그래머스 문제 출처

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

 

프로그래머스

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

programmers.co.kr

 

 

▶ 핵심 내용

1. 동영상 재생기는 3가지 기능이 있다.

 - 10초 전으로 이동(prev), 10초 후로 이동(next), 오프닝 건너뛰기(자동 기능)

 - 10초 전/후의 기능은 사용자 명령어로 수행된다.

 - 오프닝 건너뛰기는 현재 재생 위치인 pos가 오프닝 구간에 있을 때 (op_start <= pos <= op_end) 자동으로 수행된다.

 - 오프닝 건너뛰기는 현재 재생 위치인 pos를 오프닝 종료 위치(op_end)로 이동시킨다.

 

2-1. 현재 재생 위치가 10초 미만인 상태에서 "prev" 명령 수행 시 0초로 이동한다.

2-2. 현재 재생 위치에서부터 영상 종료 시간까지 10초도 남지 않았을 때, "next" 명령 수행 시 영상의 종료 시간으로 이동한다.

3. 동영상 재생 길이와 시각을 나타내는 문자열 변수들은 모두 5자리이며 "mm:ss" 형식을 갖는다.

4. 분(mm)과 초(ss)는 한자리인 경우 "01 ~ 09" 형태로 표시하며 0~59의 값을 갖는다.

5. 명령어를 담는 배열인 commands는 1~100개의 크기를 갖는다 ("prev", "next" 값만 포함한다).

 

 

 

▶ 구현 과정

1. 동영상 길이와 각 시각을 나타내는 문자열 값을 모두 초 단위의 정수로 변환한다.

2. 사용자 명령어를 수행하기 전 현재 동영상 위치(pos)가 오프닝 구간에 있는지 검사 후 '건너뛰기' 처리한다.

3. 사용자 명령어(10초 전/후 이동)를 수행한 뒤, 각 경우에 대해 변환 처리한다.

3-1. "prev" 명령 결과로 0초보다 작은 값일 경우, 0으로 변환한다.

3-2. "next" 명령 결과로 동영상 재생 길이보다 큰 경우, 동영상 재생 길잇값으로 변환한다.

3-3. 사용자 명령 결과로 오프닝 구간에 위치할 경우, 오프닝 종료 시각으로 변환한다.

4. '3.'의 과정을 사용자 명령어 입력한 개수만큼 반복하며 최종 결과를 "mm:ss" 형식으로 문자열 변환하여 return 한다.

 

 

def solution(video_len, pos, op_start, op_end, commands):
	# 시간 문자열을 초 단위 정수로 변환
    video_time = int(video_len[0:2]) * 60 + int(video_len[3:])
    pos_time = int(pos[0:2]) * 60 + int(pos[3:])
    ops_time = int(op_start[0:2]) * 60 + int(op_start[3:])
    ope_time = int(op_end[0:2]) * 60 + int(op_end[3:])

	# 사용자 명령어 수행 전 오프닝 구간 검사
    if  ops_time <= pos_time <= ope_time:
        pos_time = ope_time

	# 사용자 명령어 처리
    for cmd in commands:
        if cmd == 'next':
            pos_time = min(pos_time+10, video_time)
        elif cmd == 'prev':
            pos_time = max(pos_time-10, 0)

        if  ops_time <= pos_time <= ope_time:
            pos_time = ope_time

	# 최종 동영상 위치를 "mm:ss" 형식으로 변환
    minute = ''
    second = ''
    if pos_time//60 < 10 :
        minute = '0' + str(pos_time//60)
    else :
        minute = str(pos_time//60)

    if pos_time%60 < 10 :
        second = '0' + str(pos_time%60)
    else :
        second = str(pos_time%60)

    return  minute + ':' + second

 

 

 

 

 

 

- 끝 -

 

 

 

 

728x90