문제
프로그래머스 코딩테스트 연습 : [PCCP 기출문제] 1번 / 동영상 재생기도움말
자료구조/알고리즘, 시간복잡도, 소요시간
- 자료구조/알고리즘: -
- 시간 복잡도: O(n)
- 소요 시간: 45분
코드
function toFixedTime(minutes, seconds) {
if(minutes.toString().length < 2) {
minutes = '0' + minutes.toString();
}
if(seconds.toString().length < 2) {
seconds = '0' + seconds.toString();
}
return minutes + ":" + seconds;
}
function isOpeningTime(minutes, seconds, op_start, op_end) {
if( minutes > Number(op_start.split(":")[0]) && minutes < Number(op_end.split(":")[0]) ) {
return true;
} else if( minutes === Number(op_start.split(":")[0]) && seconds >= Number(op_start.split(":")[1]) ) {
if( minutes < Number(op_end.split(":")[0]) ) {
return true;
} else if( minutes === Number(op_end.split(":")[0]) && seconds <= Number(op_end.split(":")[1]) ) {
return true;
} else {
return false;
}
} else if( minutes === Number(op_end.split(":")[0]) && seconds <= Number(op_end.split(":")[1]) ) {
if( minutes > Number(op_start.split(":")[0]) ) {
return true;
} else if( minutes === Number(op_start.split(":")[0]) && seconds >= Number(op_start.split(":")[1]) ) {
return true;
} else {
return false;
}
} else {
return false;
}
}
function isVideoTimeOver(minutes, seconds, video_len) {
if( minutes > Number(video_len.split(":")[0]) ) {
return true
} else if ( minutes === Number(video_len.split(":")[0]) && seconds >= Number(video_len.split(":")[1]) ) {
return true;
} else {
return false;
}
}
function solution(video_len, pos, op_start, op_end, commands) {
let minutes = Number(pos.split(":")[0]);
let seconds = Number(pos.split(":")[1]);
commands.forEach((command) => {
if(isOpeningTime(minutes, seconds, op_start, op_end)) {
minutes = Number(op_end.split(":")[0]);
seconds = Number(op_end.split(":")[1]);
}
if(command === "next") {
seconds += 10;
if(seconds > 59) {
seconds -= 60;
minutes += 1;
}
} else {
seconds -= 10;
if(seconds < 0) {
if(minutes <= 0) {
minutes = 0;
seconds = 0;
} else {
seconds += 60;
minutes -= 1;
}
}
}
if(isVideoTimeOver(minutes, seconds, video_len)) {
minutes = Number(video_len.split(":")[0]);
seconds = Number(video_len.split(":")[1]);
}
});
if(isOpeningTime(minutes, seconds, op_start, op_end)) {
minutes = Number(op_end.split(":")[0]);
seconds = Number(op_end.split(":")[1]);
}
return toFixedTime(minutes, seconds);
}
회고
시간을 다룰때는 항상 에지케이스를 고려하자!!
시간이 분명 그 사이에 있는가? 에 대한 조건을 잘 세워보자!
'코딩테스트' 카테고리의 다른 글
[JS] 공원 산책 (0) | 2024.11.27 |
---|---|
[JS] 과일 장수 (0) | 2024.05.14 |
[JS] 기사단원의 무기 (0) | 2024.05.01 |
[JS] 명예의 전당 (1) (0) | 2024.04.29 |
[JS] 문자열 나누기 (0) | 2024.04.29 |