function solution(video_len, pos, op_start, op_end, commands) {
const convertTime = (str) => {
const [mm, ss] = str.split(":");
return Number(mm) * 60 + Number(ss);
};
const v_len = convertTime(video_len);
const o_start = convertTime(op_start);
const o_end = convertTime(op_end);
let c_pos = convertTime(pos);
for (const command of commands) {
if (c_pos < 0) c_pos = 0;
if (c_pos > v_len) c_pos = v_len;
if (c_pos >= o_start && c_pos <= o_end) c_pos = o_end;
switch (command) {
case "next":
c_pos += 10;
break;
case "prev":
c_pos -= 10;
break;
}
}
if (c_pos < 0) c_pos = 0;
if (c_pos > v_len) c_pos = v_len;
if (c_pos >= o_start && c_pos <= o_end) c_pos = o_end;
const mm = Math.floor((c_pos / 60).toString());
const ss = (c_pos % 60).toString();
return String(mm).padStart(2, "0") + ":" + String(ss).padStart(2, "0");
}
def convertTime(str):
[mm, ss] = map(int, str.split(":"))
return mm * 60 + ss
def solution(video_len, pos, op_start, op_end, commands):
c_pos = convertTime(pos)
v_len = convertTime(video_len)
o_s = convertTime(op_start)
o_e = convertTime(op_end)
for command in commands:
if c_pos >= o_s and c_pos <= o_e: c_pos = o_e
if command == "next": c_pos = min(v_len, c_pos + 10)
elif command == "prev": c_pos = max(0, c_pos - 10)
if c_pos >= o_s and c_pos <= o_e: c_pos = o_e
return str(c_pos // 60).zfill(2) + ":" + str(c_pos % 60).zfill(2)
이 문제도 단순 구현 문제인데 마지막에 0을 채우는 방법이 떠오르지 않아 애를 먹은 문제였다.
자바스크립트를 이용해서 먼저 문제를 풀었는데 코드를 조금 더 간결하게 만들 수 있을 것 같았다. 그래서 파이썬으로는 좀 더 코드를 간결화하는데 집중해서 문제를 풀었다. 저렇게 범위를 넘어가는 경우가 있을 때는 조건문을 통해 처리하기보다는 저렇게 최대, 최소로 비교하는 방법이 훨씬 깔끔한 것 같다.