Lv.1 동영상 재생기 문제 링크
문제분석
- "prev" : 10초 전으로 이동
- 재생 위치를 현재 위치에서 10초 전으로 이동
- 현재 위치가 10초 미만인 경우 영상의 처음 위치로 이동
- 영상의 처음 위치는 0분 0초
- "next" : 10초 후로 이동
- 재생 위치를 현재 위치에서 10초 후로 이동
- 남은 시간이 10초 미만일 경우 영상의 마지막 위치로 이동
- 영상의 마지막 위치는 동영상의 길이와 같음
- 오프닝 건너뛰기
- 현재 재생 위치가 오프닝 구간(op_start ≤ 현재 재생 위치 ≤ op_end)인 경우 자동으로 오프닝이 끝나는 위치로 이동
제약 사항
- video_len의 길이 = pos의 길이 = op_start의 길이 = op_end의 길이 = 5
- video_len, pos, op_start, op_end는 "mm:ss" 형식으로 mm분 ss초를 나타냄
- 0 ≤ mm ≤ 59
- 0 ≤ ss ≤ 59
- 분, 초가 한 자리일 경우 0을 붙여 두 자리로 나타냄
- 비디오의 현재 위치 혹은 오프닝이 끝나는 시각은 항상 동영상의 범위 안임
- 오프닝이 시작하는 시각은 항상 오프닝이 끝나는 시각보다 전임
- 1 ≤ commands의 길이 ≤ 100
- commands의 원소는 "prev" 혹은 "next"
입력 조건
출력 조건
#1
- next(), skip() 함수 동작 시 범위 밖인 경우 videoInt, endInt를 반환
- 이걸 posInt에 그대로 넣었더니 videoInt, endInt 주소를 posInt에 넣는 격이 돼서 videoInt, endInt 값이 훼손됨
- 그래서 함수 안에서 copy본을 만들어서 넣어줌
class Solution {
public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) {
String answer = "";
int[] videoInt = clockSplit(video_len);
int[] posInt = clockSplit(pos);
int[] startInt = clockSplit(op_start);
int[] endInt = clockSplit(op_end);
for(int i=0; i<commands.length; i++) {
posInt = skip(startInt, endInt, posInt);
if(commands[i].equals("next")) posInt = next(videoInt, posInt);
else posInt = prev(posInt);
}
posInt = skip(startInt, endInt, posInt);
for(int i=0; i<2; i++) {
if(posInt[i] < 10) {
answer+="0";
answer+=posInt[i];
}
else answer+=posInt[i];
answer+= i==0 ? ":" : "";
}
return answer;
}
private static int[] clockSplit(String arr) {
String[] SArr = arr.split(":");
int[] intArr = new int[2];
for(int i=0; i<2; i++) {
intArr[i] = Integer.parseInt(SArr[i]);
}
return intArr;
}
private static int[] next(int[] videoInt, int[] posInt) {
int[] videoIntCopy = {videoInt[0], videoInt[1]};
posInt[1] += 10;
if(posInt[1] >= 60) {
posInt[0] += 1;
posInt[1] -= 60;
}
if((videoInt[0] < posInt[0]) || (videoInt[0] == posInt[0] && videoInt[1] <= posInt[1])) return videoIntCopy;
return posInt;
}
private static int[] prev(int[] posInt) {
posInt[1] -= 10;
if(posInt[1] < 0) {
posInt[0] -= 1;
posInt[1] += 60;
}
if((0 > posInt[0]) || (0 == posInt[0] && 0 >= posInt[1])) {
posInt[0] = 0;
posInt[1] = 0;
}
return posInt;
}
private static int[] skip(int[] startInt, int[] endInt, int[] posInt) {
int[] endIntCopy = {endInt[0], endInt[1]};
if(((startInt[0] < posInt[0]) || (startInt[0] == posInt[0] && startInt[1] <= posInt[1])) && ((posInt[0] < endInt[0]) || (posInt[0] == endInt[0] && posInt[1] <= endInt[1]))) return endIntCopy;
return posInt;
}
}
