문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
(1) commands 배열 안 요소에 따라 현재 재생 시간 pos에서 10분을 더하거나 빼는 문제이다.
(2) 함수 getAdjustedTime 생성 후 매개 변수로 받은 시간 변수 pos의 계산 결과를 return 한다.
function solution(video_len, pos, op_start, op_end, commands) {
video_len = video_len.replace(":", "");
pos = pos.replace(":", "");
op_start = op_start.replace(":", "");
op_end = op_end.replace(":", "");
if (pos >= op_start && pos <= op_end) {
pos = op_end;
}
commands.forEach((command) => {
if (command === "next") {
pos = getAdjustedTime(pos, "add");
if (pos > video_len) {
pos = video_len;
}
} else if (command === "prev") {
if (pos < "0010") {
pos = "0000";
} else {
pos = getAdjustedTime(pos, "minus");
}
}
if (pos >= op_start && pos <= op_end) {
pos = op_end;
}
})
return `${pos.slice(0, 2)}:${pos.slice(2, 4)}`;
}
const getAdjustedTime = (pos, type) => {
const hours = Number(pos.slice(0, 2));
const minutes = Number(pos.slice(2, 4));
let totalMinutes = hours * 60 + minutes;
type === "add" ? totalMinutes += 10 : totalMinutes -= 10;
const adjustedHours = Math.floor(totalMinutes / 60);
const adjustedMinutes = totalMinutes % 60;
return `${adjustedHours.toString().padStart(2, '0')}${adjustedMinutes.toString().padStart(2, '0')}`;
}
결론
구현 문제이다.
현재 재생 위치가 오프닝 구간(op_start ≤ 현재 재생 위치 ≤ op_end)인 경우 자동으로 오프닝이 끝나는 위치로 이동하거나, 10초 보다 작은 경우 00:00으로 이동하는 등 조건을 잘 따져야 한다. 또 시간 계산을 위해 시간 -> 분, 분 -> 시간으로 치환하는 로직을 알면 어렵지 않게 해결할 수 있다.
'코딩테스트' 카테고리의 다른 글
[백준] 천재 수학자 성필 (JS) (0) | 2024.09.19 |
---|---|
[백준] 콘테스트 (JS) (0) | 2024.09.18 |
[프로그래머스] 스킬트리 (JS) (0) | 2024.09.12 |
[프로그래머스] 외계어 사전 (JS) (0) | 2024.09.04 |
[프로그래머스] 전화번호 목록 (JS) (0) | 2024.08.30 |