https://school.programmers.co.kr/learn/courses/30/lessons/340213?language=javascript
처음에는 이렇게 풀었다.
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이라 시간제한이 빡센 문제는 아닌 듯 하다
끝 ~.~
'코딩테스트' 카테고리의 다른 글
[프로그래머스 / stack] 과제 진행하기 js javascript (0) | 2024.09.05 |
---|---|
[프로그래머스 / 탐색] 대충 만든 자판 js javascript (0) | 2024.09.03 |
[프로그래머스 bfs] 단어 변환 js javascript (0) | 2024.08.30 |
[프로그래머스/정렬] H-index js javascripit 문제가이상해여 (0) | 2024.08.29 |
[프로그래머스/스택 큐] 기능 개발 js javascript (1) | 2024.08.28 |