[프로그래머스 / PCCP 기출문제 1번 / Python] 동영상 재생기

2025. 5. 31. 20:27·Algorithm/프로그래머스
반응형

문제 설명

동영상 플레이어의 위치 제어 시스템을 구현하는 문제입니다.
재생기는 'prev'와 'next' 두 가지 명령어를 지원하며, 오프닝 자동 건너뛰기 기능이 있습니다.
prev 명령어는 현재 위치에서 10초 뒤로 이동합니다. 단, 영상의 시작점인 0초보다 앞으로는 이동할 수 없습니다. next 명령어는 현재 위치에서 10초 앞으로 이동하며, 영상의 총 길이를 초과하여 이동할 수 없습니다.
재생 위치가 오프닝 구간에 들어가면(op_start ≤ 현재 위치 ≤ op_end) 자동으로 오프닝 끝 지점(op_end)으로 건너뜁니다.

  • 기본 이동 명령어
    • prev: 현재 위치에서 10초 전으로 이동 (단, 0초 미만으로는 이동 불가)
    • next: 현재 위치에서 10초 후로 이동 (단, 동영상 길이를 초과하여 이동 불가)
  • 자동 오프닝 건너뛰기
    • 현재 재생 위치가 오프닝 구간(op_start와 op_end 사이)에 있다면
    • 자동으로 오프닝이 끝나는 지점(op_end)으로 이동

풀이 방법

  1. 시간 변환과 처리
    • 입력받은 시간(mm:ss)을 초 단위로 변환: 시간 × 60 + 초
    • 모든 연산은 초 단위로 진행
  2. 명령어 처리
    • prev 명령어: max(0, 현재 위치 - 10)
      • 현재 위치에서 10초 이전으로 이동
      • 0초 미만으로는 이동 불가
    • next 명령어: min(영상 길이, 현재 위치 + 10)
      • 현재 위치에서 10초 이후로 이동
      • 영상 길이를 초과하여 이동 불가
  3. 오프닝 건너뛰기
    • 매 명령어 실행 후 오프닝 구간 체크
    • 현재 위치가 오프닝 구간에 있다면(op_start ≤ 현재 위치 ≤ op_end)
    • 즉시 오프닝 끝 지점(op_end)으로 이동
  4. 결과 출력
    • 최종 위치(초)를 다시 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
'Algorithm/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 / PCCP 기출문제 2번 / Python] 퍼즐 게임 챌린지
  • [프로그래머스 / PCCP 기출문제 9번 / Python] 지폐 접기
  • [KAKAO BLIND RECRUITMENT / 2021 / Python] 합승 택시 요금
  • [KAKAO BLIND RECRUITMENT / 2023 / Python] 이모티콘 할인행사
Kun Woo Kim
Kun Woo Kim
안녕하세요, 김건우입니다! 웹과 앱 개발에 열정적인 전문가로, React, TypeScript, Next.js, Node.js, Express, Flutter 등을 활용한 프로젝트를 다룹니다. 제 블로그에서는 개발 여정, 기술 분석, 실용적 코딩 팁을 공유합니다. 창의적인 솔루션을 실제로 적용하는 과정의 통찰도 나눌 예정이니, 궁금한 점이나 상담은 언제든 환영합니다.
  • Kun Woo Kim
    WhiteMouseDev
    김건우
  • 깃허브
    포트폴리오
    velog
  • 전체
    오늘
    어제
  • 공지사항

    • [인사말] 이제 티스토리에서도 만나요! WhiteMouse⋯
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 분류 전체보기 (100) N
      • Frontend Development (39) N
      • Backend Development (21) N
      • Algorithm (33) N
        • 백준 (11) N
        • 프로그래머스 (17)
        • 알고리즘 (5)
      • Infra (1)
      • 자료구조 (3)
  • 링크

    • Github
    • Portfolio
    • Velog
  • 인기 글

  • 태그

    frontend development
    tailwindcss
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kun Woo Kim
[프로그래머스 / PCCP 기출문제 1번 / Python] 동영상 재생기
상단으로

티스토리툴바