프로그래머스 문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/340213
▶ 핵심 내용
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
- 끝 -
'작업 > Problem Solving' 카테고리의 다른 글
BOJ(BaekJoon) 21736 Python Solve (0) | 2023.07.08 |
---|---|
백준(BOJ) 13913 숨바꼭질4 (Python3) (0) | 2023.05.05 |
백준 1107(리모컨) 파이썬(python3) 해결 (0) | 2022.05.08 |
프로그래머스 코딩 테스트 (신규 아이디 추천) - Python3 (0) | 2021.08.16 |
프로그래머스 위클리 챌린지 (2주차) - Python3 (0) | 2021.08.14 |