p_동영상재생기_340213

source school.programmers.co.kr/learn/course...
topics 600-알고리즘 & 코딩테스트
types 문제풀이
정답여부 성공

문제

10초 전이동 : if 10초 미만 , 0으로이동
10초 후이동 : if end-current <10sec , end로 이동
오프닝건너뛰기 : if current == opening구간 , opening끝으로 이동
오프닝 사이이면 자동으로 끝으로 이동해야함

단순구현문제라 쉬웠다.

function solution(video_len, pos, op_start, op_end, commands) {
    video_len = convertToTime(video_len);
    pos = convertToTime(pos);
    op_start = convertToTime(op_start);
    op_end = convertToTime(op_end);
    for(let c of commands){
        pos = checkOpening(op_start,op_end,pos)
        if(c === "prev"){
            pos[1] -= 10
            if(pos[1]<0){
                pos[1] += 60
                pos[0] -= 1
                
            }
            if(pos[0]<0){
                pos = [0,0]
            }
        }else if(c === "next"){
            pos[1] += 10
            if(pos[1]>59){
                pos[1] -= 60
                pos[0] += 1
            }
            if(pos[0]>video_len[0]||(pos[0]===video_len[0]&&pos[1]>video_len[1])){
                pos = [...video_len]
            }  
        }
        // console.log(pos)
    }
    pos = checkOpening(op_start,op_end,pos)
    // console.log(pos)
    let answer = pos[0].toString().padStart(2,'0') + ':' + pos[1].toString().padStart(2,'0')
    
    return answer;
}

function convertToTime(value){
    return [parseInt(value[0]+value[1]),parseInt(value[3]+value[4])]
}

function checkOpening(start,end,current){
    if(start[0]>current[0] || (start[0]=<mark>current[0] && start[1]>current[1])){
        // 시작보다 앞이면 리턴
        return current;
    }
    if(end[0]<current[0] || (end[0]</mark>=current[0] && end[1]<current[1])){
        // 끝보다 뒤면 리턴
        return current;
    }
    return [...end]
}