728x90
반응형
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/340213
당신은 동영상 재생기를 만들고 있습니다. 당신의 동영상 재생기는 10초 전으로 이동, 10초 후로 이동, 오프닝 건너뛰기 3가지 기능을 지원합니다. 각 기능이 수행하는 작업은 다음과 같습니다.
- 10초 전으로 이동: 사용자가 "prev" 명령을 입력할 경우 동영상의 재생 위치를 현재 위치에서 10초 전으로 이동합니다. 현재 위치가 10초 미만인 경우 영상의 처음 위치로 이동합니다. 영상의 처음 위치는 0분 0초입니다.
- 10초 후로 이동: 사용자가 "next" 명령을 입력할 경우 동영상의 재생 위치를 현재 위치에서 10초 후로 이동합니다. 동영상의 남은 시간이 10초 미만일 경우 영상의 마지막 위치로 이동합니다. 영상의 마지막 위치는 동영상의 길이와 같습니다.
- 오프닝 건너뛰기: 현재 재생 위치가 오프닝 구간(op_start ≤ 현재 재생 위치 ≤ op_end)인 경우 자동으로 오프닝이 끝나는 위치로 이동합니다.
동영상의 길이를 나타내는 문자열 video_len, 기능이 수행되기 직전의 재생위치를 나타내는 문자열 pos, 오프닝 시작 시각을 나타내는 문자열 op_start, 오프닝이 끝나는 시각을 나타내는 문자열 op_end, 사용자의 입력을 나타내는 1차원 문자열 배열 commands가 매개변수로 주어집니다. 이때 사용자의 입력이 모두 끝난 후 동영상의 위치를 "mm:ss" 형식으로 return 하도록 solution 함수를 완성해 주세요.
제한사항
- video_len의 길이 = pos의 길이 = op_start의 길이 = op_end의 길이 = 5
- video_len, pos, op_start, op_end는 "mm:ss" 형식으로 mm분 ss초를 나타냅니다.
- 0 ≤ mm ≤ 59
- 0 ≤ ss ≤ 59
- 분, 초가 한 자리일 경우 0을 붙여 두 자리로 나타냅니다.
- 비디오의 현재 위치 혹은 오프닝이 끝나는 시각이 동영상의 범위 밖인 경우는 주어지지 않습니다.
- 오프닝이 시작하는 시각은 항상 오프닝이 끝나는 시각보다 전입니다.
- 1 ≤ commands의 길이 ≤ 100
- commands의 원소는 "prev" 혹은 "next"입니다.
- "prev"는 10초 전으로 이동하는 명령입니다.
- "next"는 10초 후로 이동하는 명령입니다.
풀이 과정
- 시키는 대로 하는 문제.
- 오프닝 건너뛰기 체크를 앞뒤로 해준다.
정답
# prev - 10초 전 이동 / 10초 미만이면 처음으로
# next - 10초 후 이동 / 남은 시간 10초 미만이면 마지막으로
# 재생 위치가 오프닝구간이면 오프닝 끝나는 위치
def solution(video_len, pos, op_start, op_end, commands):
# vidio_len - 동영상 길이
# pos - 기능이 수행되기 직전의 재생위치
# op_start, op_end - 오프닝 위치
# commands - 사용자 입력
answer = ''
video_info = []
video_info.append(list(map(int, video_len.split(':'))))
video_info.append(list(map(int, pos.split(':'))))
video_info.append(list(map(int, op_start.split(':'))))
video_info.append(list(map(int, op_end.split(':'))))
for command in commands:
# 오프닝 위치 체크
if video_info[2][0]*60+video_info[2][1] <= video_info[1][0]*60+video_info[1][1] <= video_info[3][0]*60+video_info[3][1]:
video_info[1][0], video_info[1][1] = video_info[3][0], video_info[3][1]
if command == "next":
next_pos1, next_pos2 = video_info[1][0], video_info[1][1]+10
# 60초 넘겼을 때
if next_pos2 >= 60:
next_pos2 -= 60
next_pos1 += 1
# 마지막인지 체크
if next_pos1 >= video_info[0][0] and next_pos2 >= video_info[0][1]:
next_pos1k, next_pos2 = video_info[0][0], video_info[0][1]
video_info[1][0], video_info[1][1] = next_pos1, next_pos2
elif command == "prev":
next_pos1, next_pos2 = video_info[1][0], video_info[1][1]-10
# 마이너스초 되었을 때
if next_pos2 < 0:
next_pos2 += 60
next_pos1 -= 1
# 처음인지 체크
if next_pos1 < 0 or next_pos2 < 0:
next_pos1, next_pos2 = 0, 0
video_info[1][0], video_info[1][1] = next_pos1, next_pos2
# 오프닝 위치 체크
if video_info[2][0]*60+video_info[2][1] <= video_info[1][0]*60+video_info[1][1] <= video_info[3][0]*60+video_info[3][1]:
video_info[1][0], video_info[1][1] = video_info[3][0], video_info[3][1]
if len(str(video_info[1][0])) == 1:
answer += '0'
answer += str(video_info[1][0])
answer += ":"
if len(str(video_info[1][1])) == 1:
answer += '0'
answer += str(video_info[1][1])
return answer
728x90
반응형
'Problem Solving > 프로그래머스' 카테고리의 다른 글
기지국 설치 - 파이썬(Python) (0) | 2023.11.02 |
---|---|
등산코스 정하기 - 파이썬(Python) (0) | 2023.11.02 |
가장 긴 팰린드롬 - 파이썬(Python) (1) | 2023.11.01 |
순위 - 파이썬(Python) (0) | 2023.10.31 |
코딩 테스트 공부 - 파이썬(Python) (0) | 2023.10.30 |