본문 바로가기
자료구조 & 알고리즘

프로그래머스 - <[PCCP 기출문제] 1번 / 동영상 재생기> 자바스크립트 문제 풀이

by PARADISE247 2024. 10. 1.
반응형

문제 확인

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이

주어진 시간들을 각각 초단위로 변경해준 후에 "next", "prev"에 따라 현재 시간을 정해주었다.

function solution(video_len, pos, op_start, op_end, commands) {
    let curr = pos.split(":").map(x => parseInt(x));
    const length = video_len.split(":").map(x => parseInt(x));
    const start = op_start.split(":").map(x => parseInt(x));
    const end = op_end.split(":").map(x => parseInt(x));
    
    const toSeconds = ([start, end]) => start * 60 + end;
    
	// 각각 시간들을 초 단위로 변경
    let currSecs = toSeconds(curr);
    const lengthSecs = toSeconds(length);
    const startSecs = toSeconds(start);
    const endSecs = toSeconds(end);
	
	// 현재 시간이 오프닝 시작과 오프닝 끝 시간의 사이인 경우, 현재 시간을 오프닝 끝 시간으로 설정
    if(currSecs >= startSecs && currSecs <= endSecs) {
        currSecs = endSecs; 
    }
    
    for(const x of commands){    
		// "next"인 경우
        if(x === "next") {
          currSecs += 10;
            if(currSecs > lengthSecs) currSecs = lengthSecs;
        } else { // "prev"인 경우
          currSecs -= 10;
            if(currSecs < 0) currSecs = 0;
        }
		// 현재 시간이 오프닝 시작과 오프닝 끝 시간의 사이인 경우, 현재 시간을 오프닝 끝 시간으로 설정
        if(currSecs >= startSecs && currSecs <= endSecs) {
            currSecs = endSecs;
        }
    }
	// "YY:MM" 형식으로 변형하여 값을 반환해줌
    return [Math.floor(currSecs / 60) , currSecs % 60].map(x => x<10? "0" + x : x).join(":");
}
반응형