반응형
문제 설명
동영상 플레이어의 위치 제어 시스템을 구현하는 문제입니다.
재생기는 'prev'와 'next' 두 가지 명령어를 지원하며, 오프닝 자동 건너뛰기 기능이 있습니다.
prev 명령어는 현재 위치에서 10초 뒤로 이동합니다. 단, 영상의 시작점인 0초보다 앞으로는 이동할 수 없습니다. next 명령어는 현재 위치에서 10초 앞으로 이동하며, 영상의 총 길이를 초과하여 이동할 수 없습니다.
재생 위치가 오프닝 구간에 들어가면(op_start ≤ 현재 위치 ≤ op_end) 자동으로 오프닝 끝 지점(op_end)으로 건너뜁니다.
- 기본 이동 명령어
- prev: 현재 위치에서 10초 전으로 이동 (단, 0초 미만으로는 이동 불가)
- next: 현재 위치에서 10초 후로 이동 (단, 동영상 길이를 초과하여 이동 불가)
- 자동 오프닝 건너뛰기
- 현재 재생 위치가 오프닝 구간(op_start와 op_end 사이)에 있다면
- 자동으로 오프닝이 끝나는 지점(op_end)으로 이동
풀이 방법
- 시간 변환과 처리
- 입력받은 시간(mm:ss)을 초 단위로 변환:
시간 × 60 + 초
- 모든 연산은 초 단위로 진행
- 입력받은 시간(mm:ss)을 초 단위로 변환:
- 명령어 처리
- prev 명령어:
max(0, 현재 위치 - 10)
- 현재 위치에서 10초 이전으로 이동
- 0초 미만으로는 이동 불가
- next 명령어:
min(영상 길이, 현재 위치 + 10)
- 현재 위치에서 10초 이후로 이동
- 영상 길이를 초과하여 이동 불가
- prev 명령어:
- 오프닝 건너뛰기
- 매 명령어 실행 후 오프닝 구간 체크
- 현재 위치가 오프닝 구간에 있다면(
op_start ≤ 현재 위치 ≤ op_end
) - 즉시 오프닝 끝 지점(
op_end
)으로 이동
- 결과 출력
- 최종 위치(초)를 다시 mm:ss 형식으로 변환
- 형식에 맞춰 출력
내 답안
def solution(video_len, pos, op_start, op_end, commands):
# 오프닝 시간 구간을 스킵하는 함수
def skip(time):
# 주어진 시간이 오프닝 구간 내에 있다면 오프닝 끝 시간으로 스킵
if op_start <= time <= op_end:
return op_end
return time # 그 외의 경우는 입력된 시간을 그대로 반환
# 시간 문자열을 초 단위로 변환하는 함수
def time_to_seconds(time_str):
minutes, seconds = map(int, time_str.split(":")) # "mm:ss" 형태의 문자열을 분리
return minutes * 60 + seconds # 분을 초로 변환 후 총 초로 반환
# 초 단위의 시간을 "mm:ss" 형식의 문자열로 변환하는 함수
def seconds_to_time(seconds):
minutes, seconds = divmod(seconds, 60) # 초를 분과 초로 분리
return f"{minutes:02d}:{seconds:02d}" # "mm:ss" 형태로 포맷하여 반환
# 입력된 시간들을 초 단위로 변환
video_len, pos, op_start, op_end = map(time_to_seconds, [video_len, pos, op_start, op_end])
# 초기 위치가 오프닝 시간에 포함되면 스킵
pos = skip(pos)
# 각 명령어에 따라 위치 조정
for command in commands:
if command == "prev": # 이전 10초
pos = max(0, pos-10) # 위치를 10초 앞으로, 0보다 작아지지 않도록 조정
else: # 다음 10초
pos = min(video_len, pos+10) # 위치를 10초 뒤로, 비디오 길이를 넘지 않도록 조정
pos = skip(pos) # 조정된 위치가 오프닝 시간에 포함되면 스킵
answer = seconds_to_time(pos) # 최종 위치를 "mm:ss" 형식으로 변환
return answer
결론 및 느낀점
이 예제를 통해 동영상 플레이어의 위치 제어 시스템을 구현하는 방법을 실제로 적용해보았습니다. 기초적인 이동 명령뿐만 아니라 오프닝 자동 건너뛰기 기능을 추가함으로써 사용자 경험을 향상시킬 수 있는 방법을 탐구했습니다. 실제 애플리케이션에서 이러한 기능들은 사용자가 원하는 장면으로 더 빠르고 정확하게 이동할 수 있도록 도와줍니다.
프로그래밍에서 함수의 재사용성과 로직의 명확성을 유지하는 것이 중요함을 다시 한번 깨닫게 되었습니다. 각 기능을 분명한 단위로 분리하고, 코드 내에서의 재사용을 용이하게 함으로써 전체적인 코드의 가독성과 유지 보수성을 높일 수 있었습니다.
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / PCCP 기출문제 3번 / Python] 충돌위험 찾기 (0) | 2025.05.31 |
---|---|
[프로그래머스 / PCCP 기출문제 2번 / Python] 퍼즐 게임 챌린지 (0) | 2025.05.31 |
[프로그래머스 / PCCP 기출문제 9번 / Python] 지폐 접기 (8) | 2025.05.31 |
[KAKAO BLIND RECRUITMENT / 2021 / Python] 합승 택시 요금 (0) | 2025.05.30 |
[KAKAO BLIND RECRUITMENT / 2023 / Python] 이모티콘 할인행사 (0) | 2025.05.30 |