[programmers/js] [PCCP 기출문제] 1번 / 동영상 재생기

승민·2025년 1월 6일

알고리즘

목록 보기
130/171

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

https://school.programmers.co.kr/learn/courses/30/lessons/340213?language=javascript

문제 설명

동영상 재생기를 만들고 있습니다. prev를 입력 받으면 10초 전, next를 입력 받으면 10초 후로 이동합니다.
만약 현재 시간이 오프닝에 있다면, 오프닝 종료 시간으로 이동합니다.

동영상의 길이를 나타내는 문자열 video_len, 기능이 수행되기 직전의 재생위치를 나타내는 문자열 pos, 오프닝 시작 시각을 나타내는 문자열 op_start, 오프닝이 끝나는 시각을 나타내는 문자열 op_end, 사용자의 입력을 나타내는 1차원 문자열 배열 commands가 매개변수로 주어집니다. 이때 사용자의 입력이 모두 끝난 후 동영상의 위치를 "mm:ss" 형식으로 return 하도록 solution 함수를 완성해 주세요.

풀이

우선 문자열로 된 시간을 숫자로 변경해 계산을 쉽게합니다.
그 후 10초 전, 후 이동 시간을 계산 후
1. 1초 이전인가?
2. 동영상 종료 시간 이후인가?
3. 오프닝에 겹치나?
를 고려해 시간을 변경하면 답을 구할 수 있습니다.

function solution(video_len, pos, op_start, op_end, commands) {
    // op_start <= now <= op_end 자동으로 end로
    const changeTime = (time, type="str") => {
        if (type === "str") {
            const [h, m] = time.split(":").map(Number);
            return h * 60 + m;
        }
        return `${String(Math.trunc(time/60)).padStart(2, "0")}:${String(Math.trunc(time%60)).padStart(2, "0")}`;
    }
    let now = changeTime(pos, "str")
    const end = changeTime(op_end, "str");
    const start = changeTime(op_start, "str");
    const videoTime = changeTime(video_len, "str");
    
    for (const com of commands) {
        if (now <= end && start <= now) now = end;
        if (com === "next") now += 10;
        else now -= 10;
        if (videoTime < now) now = videoTime;
        if (now < 0) now = 0;
        
    }
    if (now <= end && start <= now) now = end;
    if (videoTime < now) now = videoTime;
    if (now < 0) now = 0;
    
    return changeTime(now, "1")
}

0개의 댓글