코테
[java] [PCCP 기출문제] 1번 / 동영상 재생기
상똥
2024. 9. 25. 23:05
풀이 |
1. 모든 시간 값들을 숫자로 변환한다 - 분 단위는 * 60, 초 단위는 그대로 정수값으로 변환해 더한다 2. next, prev, skip 함수를 만들어준다 - int 형은 void를 사용해서 값을 바꿀 수 없으므로 int 형으로 반환하는 함수를 만들어 현재 시간을 수정한다 - next는 10초 후에 영상 밖으로 넘어가면 비디오 시간을, 아니면 +10 을 반환 - prev는 10초 전에 영상 밖으로 넘어가면 0을, 아니면 -10을 반환 3. 오프닝 시간 안에 있을 경우에는 무조건 skip하므로, 초기에 skip을 적용해준다 - skip을 한 번 적용한 다음 명령어를 순회해야 한다 4. 명령어를 순회한다 - next, prev에 따라 현재 시간을 조정하고 - 다음 명령어로 넘어가기 전 skip을 한 번 확인한다 5. 순회가 끝나면 XX:XX 형식으로 만들어 반환한다 - String.format(원하는 형식, 바꿀_정수값) 을 활용한다 |
회고 |
- 이런 시간 비교 문제는 <시간 * 60 * 60 + 분 * 60 초>로 바꿔줘야 계산이 편하다 - 3항 연산자를 남발했지만 코테 풀 때 편하잖아 뭐어때용ㅋ if 문 쓰면 너무 길어짐 ㅠㅠ - String.format(원하는 형식, 바꿀_정수값) 잊지말자 |
코드 (접은 글) |
더보기
import java.util.*;
class Solution {
public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) {
int video = change_into_int(video_len);
int cur = change_into_int(pos);
int op_s = change_into_int(op_start);
int op_e = change_into_int(op_end);
cur = skip_opening(cur, op_s, op_e);
for(String command: commands) {
cur = command.equals("next") ? next(cur, video) : prev(cur);
cur = skip_opening(cur, op_s, op_e);
}
return String.format("%02d", cur / 60) + ":" + String.format("%02d", cur % 60);
}
private int change_into_int(String target) {
return Integer.parseInt(target.split(":")[0]) * 60
+ Integer.parseInt(target.split(":")[1]);
}
private int skip_opening(int cur, int op_s, int op_e) {
return cur >= op_s && cur < op_e ? op_e : cur;
}
private int next(int cur, int video) {
return cur + 10 > video ? video : cur + 10;
}
private int prev(int cur) {
return cur - 10 < 0 ? 0 : cur - 10;
}
}