https://school.programmers.co.kr/learn/courses/30/lessons/340213
확인 내용
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
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [PCCP 기출문제] 2번 / 퍼즐게임챌린지(JavaScript) (1) | 2024.11.10 |
---|---|
[프로그래머스] [PCCP 기출문제] 1번 / 붕대 감기(javascript) (3) | 2024.11.09 |
[프로그래머스]Lv3.이중우선순위큐(Java) (0) | 2023.10.08 |
[프로그래머스] Lv.2 연속된 부분 수열의 합(Java) (0) | 2023.09.22 |
[프로그래머스]Lv2. 조건에 부합하는 중고거래 상태 조회하기(SQL) (0) | 2023.09.14 |