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")
}