동영상 재생기

우하학·2024년 11월 9일

프로그래머스

목록 보기
1/14

PCCP 기출문제 1번 / 동영상 재생기

문제 요약 : 비디오 길이, 현재 재생 시점, 오프닝 시작과 끝 시점, 사용자의 커맨드 ( prev, next : 각각 10초 전 후로 이동, 10초 미만으로 남거나 진행 중일 땐 끝으로 이동)가 주어졌을 때 사용자의 커맨드에 따라 진행한 후에 현재 위치를 찾는 것 ㅇㅇ . 근데 중요한 건 오프닝에 들어가면 오프닝 끝 포인트로 바로 점프 해야 됨!

초기코드

def solution(video_len, pos, op_start, op_end, commands):
    answer = ""
    v_m, v_s = video_len.split(":")
    v_m = int(v_m)
    v_s = int(v_s)

    p_m, p_s = pos.split(":")
    p_m = int(p_m)
    p_s = int(p_s)

    op_s_m, op_s_s = op_start.split(":")
    op_s_m = int(op_s_m)
    op_s_s = int(op_s_s)

    op_e_m, op_e_s = op_end.split(":")
    op_e_m = int(op_e_m)
    op_e_s = int(op_e_s)

    #모두 초로 변환
    video = v_m * 60 + v_s
    pos = p_m * 60 + p_s
    op_start = op_s_m * 60 + op_s_s
    op_end = op_e_m * 60 + op_e_s




    for command in commands:
        print(f"before : pos : {pos}")
        #오프닝 건너뛰기
        if op_start <= pos <= op_end:
            pos = op_end
        if command == "prev":
            if pos < 10 :
                pos = 0
            else :
                pos -= 10
        elif command == "next":
            if video - pos < 10 :
                pos = video
            else :
                pos += 10
        print(f"after : pos : {pos}")
        print("------")

    if op_start <= pos <= op_end:
        pos = op_end

    x = int(pos/60)
    y = int(pos%60)
    answer = f"{x:02}:{y:02}"
    return answer

근데 뭔가 짜고 보니까 너무 멍청하게 짠 거 같음

#prev : 10초 이전으로 이동, 10초 미만이면 영상의 처음으로 이동
#next : 10초 이후로 이동, 남은 영상의 길이가 10초 미만이면 영상의 끝으로 이동
#오프닝 건너뛰기 : 현재 위치가 오프닝 재생구간 (op_start~op_end)라면 오프닝 끝나는 위치로

#video_len = 동영상의 길이
#pos = 현재 재생위치
#op_start = 오프닝 시작위치
#op_end = 오프닝 끝 위치
#commands = 명령어 리스트

def openning(pos, s, e):
    if s<=pos<=e:
        pos = e
    return pos

def solution(video_len, pos, op_start, op_end, commands):
    v_m, v_s = video_len.split(":")
    p_m, p_s = pos.split(":")
    op_s_m, op_s_s = op_start.split(":")
    op_e_m, op_e_s = op_end.split(":")

    #모두 초로 변환
    video = int(v_m) * 60 + int(v_s)
    pos = int(p_m) * 60 + int(p_s)
    op_start = int(op_s_m) * 60 + int(op_s_s)
    op_end = int(op_e_m) * 60 + int(op_e_s)


    for command in commands:
        #오프닝 건너뛰기
        # if op_start <= pos <= op_end:
        #     pos = op_end
        pos = openning(pos, op_start, op_end)
        if command == "prev":
            if pos < 10 :
                pos = 0
            else :
                pos -= 10
        elif command == "next":
            if video - pos < 10 :
                pos = video
            else :
                pos += 10

    # if op_start <= pos <= op_end:
    #     pos = op_end
    pos = openning(pos, op_start, op_end)
    answer = f"{int(pos/60):02}:{int(pos%60):02}"
    return answer

수정 사항

  1. 오프닝 건너뛰기를 함수로 넘겼음
  2. 불필요한 변수를 좀 줄여봄 ㅇㅇ

파이썬 문법 기억할 것

1. 문자열 포맷팅

answer = f"{int(pos/60):02}:{int(pos%60):02}"

이런 식으로 f""꼴로 바로 만들 수 있으며, 2자리의 숫자로 표현하고 빈자리를 0으로 채우는 방법
ex) 14인 경우 -> 14 / 4인 경우 -> 04

v_m, v_s = video_len.split(":")

이런 식으로 .split("")를 통해 자를 수 있음! -> 이건 리스트로도 받을 수 있어서 나중에 공부를 조금 더 할 필요가 있음 ㅇㅇ

profile
코린이 탈출기

0개의 댓글