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

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/340213

 

프로그래머스

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

programmers.co.kr

 

확인 내용

1. 3가지 기능(10초 전으로 이동, 10초 후로 이동, 오프닝 건너뛰기)가 있다.

2. 사용자의 입력 내용에 따라 기능 수행해야 한다.

3. 현재 진행 시간이 오프닝 시간이라면 오프닝 종료 시간으로 이동한다.


 

코드 로직

1. 시간을 숫자로 전환하여 연산

2. 현재 시간을 확인하여 오프닝 중이라면 오프닝 종료 시점으로 전환

3. 사용자 입력 내용이 'next'라면 +10, 'prev'라면 -10으로 연산

4. 마지막에는 최종 출력 타입으로 수정하여 return

 

 

video_len_int : 영상 종료 시간을 숫자로 전환

pos_int : 현재 시간을 숫자로 전환

op_start_int : 오프닝 시작 시간을 숫자로 전환

op_end_int : 오프닝 종료 시간을 숫자로 전환

time : 사용자가 입력한 내용에 따라 수정된 시간

min, sec : 최종 시간에 따라 분, 초를 나눠서 "mm:ss" 타입에 맞춰서 return. (이때 첫번째 자리수만 나오게 된다면 "0"을 추가하도록 수행하였습니다.)

var min = Math.floor(time/60) // 분
var sec = Math.floor(time - min*60) // 초
answer = min.toString().padStart(2,"0")+":"+ sec.toString().padStart(2,"0")

** padStart, padEnd 함수를 사용하여 2자리 수까지 표현하는데 한자리수라면 앞이나 뒤에 지정 문자("0")을 추가한다. (참고 : 하단 링크 확인)

 

 

중요!!

현재 시간이 오프닝 시간 중인 사용자 입력 기능 수행 전 후로 확인해야 함.

짜치지만,, 아래와 같이 함수화 하면 더 좋을 것 같습니다.

function isOp(op_start, op_end, pos){
	if (op_start <= pos && pos <= op_end) pos = op_end
    return pos
}

 

 

최종 수행 코드

function solution(video_len, pos, op_start, op_end, commands) {
    var answer = '';
    var time = 0
    
    // 시간을 숫자로 전환
    let video_len_int = video_len.split(":")[0] * 60 + parseInt(video_len.split(":")[1])
    let pos_int = pos.split(":")[0] * 60 + parseInt(pos.split(":")[1])
    let op_start_int = op_start.split(":")[0] * 60 + parseInt(op_start.split(":")[1])
    let op_end_int = op_end.split(":")[0] * 60 + parseInt(op_end.split(":")[1])
    console.log(video_len_int, pos_int, op_start_int, op_end_int)
    
    time = pos_int
    for (var i=0; i<commands.length; i++){
        if (op_start_int <= time && time <= op_end_int) time = op_end_int
        
        if (commands[i] === "next"){ // 10초 후로 이동
            time+=10
        } else { // 10초 전으로 이동
            time-=10
        }
        
        if (time<0) time = 0 // 시간은 0이상이어야 한다.
        // 오프닝 중이면 오프닝 끝난 위치로 이동
        if (op_start_int <= time && time <= op_end_int) time = op_end_int
        if (time > video_len_int) time = video_len_int
        console.log(time)
    }
    var min = Math.floor(time/60)
    var sec = Math.floor(time - min*60)
    answer = min.toString().padStart(2,"0")+":"+ sec.toString().padStart(2,"0")
    console.log(time, min, sec, answer)
    
    
    return answer;
}

 

 

참고 

padStart, padEnd 함수 : https://velog.io/@suld2495/padStart%EC%99%80-padEnd-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

728x90