https://school.programmers.co.kr/learn/courses/30/lessons/340213?language=javascript
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
처음에는 이렇게 풀었다.
function solution(video_len, pos, op_start, op_end, commands) {
var answer = '';
const [min, sec] = pos.split(":").map(Number);
const [vmin,vsec]= video_len.split(":").map(Number);
const [smin,ssec]=op_start.split(":").map(Number);
const [emin,esec]=op_end.split(":").map(Number);
let [nmin,nsec] = [min,sec];
const converter = (min,sec)=>min*60+sec;
for(cmd of commands){
if(cmd==="next"){
if(converter(nmin,nsec)>=converter(smin,ssec)&&converter(nmin,nsec)<=converter(emin,esec)){
[nmin,nsec]=[emin,esec];
}
nsec += 10;
if (nsec >= 60) {
nsec -= 60;
nmin += 1;
}
if(converter(nmin,nsec)>=converter(smin,ssec)&&converter(nmin,nsec)<=converter(emin,esec)){
[nmin,nsec]=[emin,esec];
}
}else{
if (nmin == 0 && nsec < 10) {
[nmin,nsec]=[0,0];
}
else if(nsec<10){
nsec = 60+nsec-10;
nmin -=1;
}else nsec = nsec-10;
}
}
return nmin.toString().padStart(2, '0')+":"+nsec.toString().padStart(2, '0');
}
1,6,7,9,12 총 5개의 케이스에서 틀렸다고 나왔다.
어떤 케이스가 고려되지 않았는지 모르겠어서 질문 게시판을 찾아보니
동영상 길이보다 길어지는 경우를 고려해야 한다고 나와있었다!!!
애초에 props로 동영상 길이를 왜 제공해주는지 생각했어야 했는데....ㅎㅎ 나의 실수
그래서 중간에
if(converter(vmin,vsec)<=converter(nmin,nsec)) [nmin,nsec]=[vmin,vsec];
이 부분을 추가해 주었는데 어라라 아직도 1번케이스가 통과가 되지 않는 것이었다.
다시 찾아보니 prev 명령어의 경우에도 오프닝 구간안에 있으면 오프닝 끝으로 이동해야한다는 것이었다.........헉
function solution(video_len, pos, op_start, op_end, commands) {
var answer = '';
const [min, sec] = pos.split(":").map(Number);
const [vmin,vsec]= video_len.split(":").map(Number);
const [smin,ssec]=op_start.split(":").map(Number);
const [emin,esec]=op_end.split(":").map(Number);
let [nmin,nsec] = [min,sec];
const converter = (min,sec)=>min*60+sec;
for(cmd of commands){
if(cmd==="next"){
if(converter(nmin,nsec)>=converter(smin,ssec)&&converter(nmin,nsec)<=converter(emin,esec))
[nmin,nsec]=[emin,esec];
nsec += 10;
if (nsec >= 60) {
nsec -= 60;
nmin += 1;
}
if(converter(vmin,vsec)<=converter(nmin,nsec)) [nmin,nsec]=[vmin,vsec];
else if(converter(nmin,nsec)>=converter(smin,ssec)&&converter(nmin,nsec)<=converter(emin,esec)){
[nmin,nsec]=[emin,esec];
}
}else{
if (nmin == 0 && nsec < 10) {
[nmin,nsec]=[0,0];
}
else if(nsec<10){
nsec = 60+nsec-10;
nmin -=1;
}else nsec = nsec-10;
if(converter(nmin,nsec)>=converter(smin,ssec)&&converter(nmin,nsec)<=converter(emin,esec))
[nmin,nsec]=[emin,esec]; //여기 이부분을 추가함
}
}
return nmin.toString().padStart(2, '0')+":"+nsec.toString().padStart(2, '0');
}
오프닝 구간인지 확인하는 조건문을 prev 에서도 넣어주니
간단하게 해결이 되었다. ㅎㅎ
난이도 1이라 시간제한이 빡센 문제는 아닌 듯 하다
끝 ~.~