

link: 코딩테스트 연습 - [PCCP 기출문제] 1번 / 동영상 재생기
mm:ss를 전부 초로 바꾸어 시간을 이동한 뒤 다시 mm:ss 형태로 만들기
언제든 오프닝 시간대에 있다면 오프닝은 건너뛰기
배열 출력 - toString 까먹지 말자!
import java.util.Arrays;
String[] mn = video_len.split(":");
System.out.println(Arrays.toString(mn));

"mm:ss" 형식으로 출력하기
format 사용
answer = String.format("%02d:%02d", pos_m, pos_s);
if문 사용
String mm = (pos_m < 10) ? "0" + pos_m : "" + pos_m;
String ss = (pos_s < 10) ? "0" + pos_s : "" + pos_s;
answer = mm + ":" + ss;
import java.util.*;
class Solution {
public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) {
String answer = "";
// video_len을 초로 바꾸기
String[] video_mn = video_len.split(":");
int video_m = Integer.parseInt(video_mn[0]);
int video_s = Integer.parseInt(video_mn[1]);
video_s += video_m * 60;
// pos를 초로 바꾸기
String[] pos_mn = pos.split(":");
int pos_m = Integer.parseInt(pos_mn[0]);
int pos_s = Integer.parseInt(pos_mn[1]);
pos_s += pos_m * 60;
// op_stsrt 초로 바꾸기
String[] ops_mn = op_start.split(":");
int ops_m = Integer.parseInt(ops_mn[0]);
int ops_s = Integer.parseInt(ops_mn[1]);
ops_s += ops_m * 60;
// op_end 초로 바꾸기
String[] ope_mn = op_end.split(":");
int ope_m = Integer.parseInt(ope_mn[0]);
int ope_s = Integer.parseInt(ope_mn[1]);
ope_s += ope_m * 60;
// commands 배열의 길이 저장
int n = commands.length;
for(int i = 0; i < n; i++){
// 현재 시간이 오프닝 사이에 있다면 오프닝 건너뛰기
if(pos_s >= ops_s && pos_s <= ope_s)
pos_s = ope_s;
// next일 때 10초 후 비디오 길이 안에 있다면 10초 건너뛰기
// 비디오 길이를 벗어난다면 비디오 끝으로 이동
if(commands[i].equals("next")){
if((pos_s + 10) < video_s)
pos_s += 10;
else
pos_s = video_s;
// prev일 때 10초 전 비디오 길이 안에 있다면 10초 되감기
// 0초보다 전이라면 0초로 이동
} else if(commands[i].equals("prev")){
if((pos_s - 10) > 0)
pos_s -= 10;
else
pos_s = 0;
}
}
// 현재 시간이 오프닝 사이에 있다면 오프닝 건너뛰기
if(pos_s >= ops_s && pos_s <= ope_s)
pos_s = ope_s;
// 분초로 바꾸기
pos_m = pos_s / 60;
pos_s = pos_s % 60;
// "mm:ss" 형태로 바꾸기
answer = String.format("%02d:%02d", pos_m, pos_s);
return answer;
}
}
오프닝 한 번으로 줄이는 것은 불가능
시간을 초형태로 바꾸는 것은 함수로 빼낼 수 있음
import java.util.*;
class Solution {
// 분초를 초로 바꾸는 함수
private int toSec(String mmss){
String[] ms = mmss.split(":");
int m = Integer.parseInt(ms[0]);
int s = Integer.parseInt(ms[1]);
return s + m * 60;
}
public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) {
String answer = "";
// 분초를 전부 초로 변경
int video_s = toSec(video_len);
int pos_s = toSec(pos);
int ops_s = toSec(op_start);
int ope_s = toSec(op_end);
int n = commands.length;
for(int i = 0; i < n; i++){
if(pos_s >= ops_s && pos_s <= ope_s)
pos_s = ope_s;
if(commands[i].equals("next")){
if((pos_s + 10) < video_s)
pos_s += 10;
else
pos_s = video_s;
} else if(commands[i].equals("prev")){
if((pos_s - 10) > 0)
pos_s -= 10;
else
pos_s = 0;
}
}
if(pos_s >= ops_s && pos_s <= ope_s)
pos_s = ope_s;
int pos_m = pos_s / 60;
pos_s = pos_s % 60;
answer = String.format("%02d:%02d", pos_m, pos_s);
return answer;
}
}