당신은 동영상 재생기를 만들고 있습니다. 당신의 동영상 재생기는 10초 전으로 이동, 10초 후로 이동, 오프닝 건너뛰기 3가지 기능을 지원합니다. 각 기능이 수행하는 작업은 다음과 같습니다.
동영상의 길이를 나타내는 문자열 video_len, 기능이 수행되기 직전의 재생위치를 나타내는 문자열 pos, 오프닝 시작 시각을 나타내는 문자열 op_start, 오프닝이 끝나는 시각을 나타내는 문자열 op_end, 사용자의 입력을 나타내는 1차원 문자열 배열 commands가 매개변수로 주어집니다. 이때 사용자의 입력이 모두 끝난 후 동영상의 위치를 "mm:ss" 형식으로 return 하도록 solution 함수를 완성해 주세요.
video_len의 길이 = pos의 길이 = op_start의 길이 = op_end의 길이 = 5
1 ≤ commands의 길이 ≤ 100
video_len : "34:33"
pos op_start : "13:00"
op_end : "00:55"
commands : "02:55"
"13:00"
function solution(video_len, pos, op_start, op_end, commands) {
var answer = '';
let full = video_len.split(":").map(Number);
let current = pos.split(":").map(Number);
let start = op_start.split(":").map(Number);
let end = op_end.split(":").map(Number);
let startSec = start[0]*60+start[1];
let endSec = end[0]*60+end[1];
function isOpening() {
let sec = current[0]*60+current[1];
if(startSec<=sec && sec<=endSec) return true;
return false;
}
for(let i=0; i<commands.length; i++) {
if(isOpening()) {
current[0] = end[0];
current[1] = end[1];
}
if(commands[i]==="next") {
current[1] = current[1] + 10;
if(current[1]>59) {
current[0]++;
current[1] = current[1] - 60;
}
if(current[0]>full[0] || (current[0]=== full[0] && current[1]>full[1])) {
current[0] = full[0];
current[1] = full[1];
}
} else if(commands[i]==="prev") {
current[1] = current[1] - 10;
if(current[1]<0) {
current[0]--;
current[1] = 60 + current[1];
}
if(current[0]<0) {
current[0] = 0;
current[1] = 0;
}
}
if(isOpening()) {
current[0] = end[0];
current[1] = end[1];
}
}
answer = `${(current[0]+"").padStart(2, '0')}:${(current[1]+"").padStart(2, '0')}`;
return answer;
}
오프닝 도중 시간 체크하기에서 삽질을 정말 많이 했다. 결국 초로 변환해서 해결하는 방법 밖에 없었는데 이미 분/초로 구현을 다 해놔서 효율성 챙기기 위해 모든 코드를 갈아엎기에는 너무 시간 투자를 많이해서.... 오프닝 체크를 위해서만 초로 변환해주었다. 진짜...... 테스트 케이스 하나가 진짜 발목을 너무 잡았는데 아직도 모르겠다...