https://school.programmers.co.kr/learn/courses/30/lessons/340213
지금까지 풀었던 문제중 가장 고난도의 문제 (정답률 35%)
알고리즘 구조를 짜는 것 자체는 어렵지 않았지만
"mm:ss" 형식을 숫자형처럼 연산하는 것이 이 문제의 관건이었다.
최종 풀이
function solution(video_len, pos, op_start, op_end, commands) {
let [m,s] = pos.split(':'); let res = +m*60 + +s;
let [m_os,s_os] = op_start.split(':'); let res_os = +m_os*60 + +s_os;
let [m_oe,s_oe] = op_end.split(':'); let res_oe = +m_oe*60 + +s_oe;
let [m_v,s_v] = video_len.split(':'); let res_v = +m_v*60 + +s_v;
if(res>=res_os && res<=res_oe) {
res = res_oe
}
commands.forEach((a)=>{
if (a==="prev") {
res = res>10 ? res-10 : 0
} else if(a==="next") {
res = res_v-res>10 ? res+10 : res_v
}
if(res>=res_os && res<=res_oe) {
res = res_oe
}
})
let answer = [
Math.floor(res/60)<10 ? "0"+Math.floor(res/60) : Math.floor(res/60) ,
res%60<10 ? "0"+res%60 : res%60]
.join(":")
return answer
}
"mm:ss" 형식을 숫자형으로 바꾸기 위해서
콜론을 기준으로 앞뒤를 나누어 mm부분에 60을 곱해주었다.
다시 숫자형을 "mm:ss"형식으로 바꾸기 위해서는
한자리 수는 앞에 0을 붙여 두자리 형태로 변환시켜 주어야 했는데
60으로 나누었을 때 mm은 몫이, ss는 나머지가 10보다 작은 경우에
문자열 "0"을 붙여 주었다.
다른 사람의 풀이
mm:ss 형식을 숫자형으로 바꿀 때
따로 함수를 만들면 더 깔끔하게 풀 수 있을 것 같다.
또한 padStart 함수를 이용하면
문자열 앞에 특정 문자를 추가해 지정된 길이를 맞출 수 있다는 것을 배웠다.
기능 구현을 마치면
성능 개선과, 가독성 측면에서도 발전시켜보자
'Coding Test' 카테고리의 다른 글
[JS] 프로그래머스 / 대충 만든 자판 (0) | 2024.12.21 |
---|---|
[JS] 프로그래머스 / 덧칠하기 (0) | 2024.12.21 |
[JS] 프로그래머스 / 푸드 파이트 대회 (0) | 2024.12.14 |
[JS] 프로그래머스 / 크기가 작은 부분 문자열 (0) | 2024.12.13 |
[JS] 프로그래머스 / 주사위 게임 3 (0) | 2024.12.10 |