[프로그래머스] [PCCP 기출문제] 1번 / 동영상 재생기

Chobby·2024년 9월 9일
1

Programmers

목록 보기
348/349

별도의 알고리즘 풀이 방법 없이 직관적으로 풀이하면 되는 문제이다.

중요 포인트는 항상 MM:SS 단위로 입력이 주어질 경우 단위로 변환하여 풀이하는 것이 쉽다는 것

😎풀이

function solution(video_len, pos, op_start, op_end, commands) {
    const videoSec = transferMMSSToSec(video_len)
    const posSec = transferMMSSToSec(pos)
    const opStartToSec =  transferMMSSToSec(op_start)
    const opEndToSec = transferMMSSToSec(op_end)
    let curPos = posSec
    
    // 오프닝 생략 함수
    function openingSkip() {
        if(curPos >= opStartToSec && curPos <= opEndToSec) {
            curPos = opEndToSec
        }
    }
    
    // 시작 부분이 오프닝 부분에 해당한다면 생략
    openingSkip()
    
    for(const command of commands) {
        switch(command) {
            // 명령에 따라 현재 위치를 조정하고 오프닝 및 최대 최소시간 검사
            case 'prev': {
                curPos -= 10
                if(curPos < 0) curPos = 0
                openingSkip()
                break
            }
            case 'next': {
                curPos += 10
                if(curPos > videoSec) curPos = videoSec
                openingSkip()
                break
            }
            default: {
                break
            }
        }
    }
    
    const curMM = Math.floor(curPos/60)
    const curSS = curPos % 60
    // 초 단위의 수를 문자열 분, 초로 변환
    const strCurMM = String(curMM).padStart(2, 0)
    const strCurSS = String(curSS).padStart(2, 0)
    
    return strCurMM + ":" + strCurSS
}

// MM:SS 형태의 문자열을 초 단위로 변환
function transferMMSSToSec(str) {
    const [strMM, strSS] = str.split(":").map(Number)
    return strMM * 60 + strSS
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글