728x90
코드 힌트:
- 동영상 시간 처리:
- 동영상의 전체 길이와 현재 재생 위치, 오프닝 구간 시작/종료 시간을 모두 분 단위로 변환하여 처리합니다.
- 명령어 처리:
- next 명령어는 10초 앞으로 이동, 그 외 명령어는 10초 뒤로 이동하게 구현합니다.
- 오프닝 구간 스킵:
- 오프닝 구간에 도달하면 해당 구간을 넘어서 이동합니다.
- 시간 설정 및 포맷 변환:
- 현재 시간이 동영상의 길이를 벗어나지 않도록 제한하고, 시/분 형식으로 변환해 출력합니다.
정답은 더보기 클릭
더보기
class Solution {
public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) {
// Video 객체 생성 (동영상 전체 길이, 현재 위치, 광고 시작 시간, 광고 종료 시간)
Video video = new Video(video_len, pos, op_start, op_end);
// 주어진 명령어에 따라 동영상 위치 이동
for (String command : commands) {
video.move(command); // 각 명령어를 Video 객체에 전달하여 처리
}
return video.toString(); // 최종적으로 변환된 시간 반환
}
}
class Video {
int vdTime; // 동영상 전체 길이 (초 단위)
int curTime; // 현재 재생 위치 (초 단위)
int opStart; // 오프닝 시작 시간 (초 단위)
int opEnd; // 오프닝 종료 시간 (초 단위)
public Video(String video_len, String pos, String op_start, String op_end) {
// 동영상 길이, 현재 위치, 오프닝 시작/종료 시간을 분 단위로 초로 변환하여 저장
this.vdTime = Integer.parseInt(video_len.split(":")[0]) * 60 +
Integer.parseInt(video_len.split(":")[1]);
this.curTime = Integer.parseInt(pos.split(":")[0]) * 60 +
Integer.parseInt(pos.split(":")[1]);
this.opStart = Integer.parseInt(op_start.split(":")[0]) * 60 +
Integer.parseInt(op_start.split(":")[1]);
this.opEnd = Integer.parseInt(op_end.split(":")[0]) * 60 +
Integer.parseInt(op_end.split(":")[1]);
opSkip(); // 처음부터 광고 구간에 있는지 확인하여 스킵
}
// 오프닝 구간에 있는지 확인하고, 오프닝이 시작되었으면 광고 종료 지점으로 이동
void opSkip() {
if (opStart <= curTime && curTime < opEnd)
curTime = opEnd;
}
// 명령어에 따라 동영상 위치 이동
void move(String command) {
if (command.equals("next"))
curTime += 10; // "next"는 10초 앞으로 이동
else
curTime -= 10; // 그 외 명령어는 10초 뒤로 이동
timeSet(); // 이동 후 현재 시간이 적절한 범위 내에 있는지 확인
}
// 동영상 시간이 유효한 범위 내에 있는지 확인
void timeSet() {
if (curTime < 0)
curTime = 0; // 최소 0초로 제한
else if (curTime > vdTime)
curTime = vdTime; // 최대 동영상 길이로 제한
opSkip(); // 이동 후에도 광고 구간에 있는지 확인하여 스킵
}
// 현재 시간을 "분:초" 형식으로 변환
@Override
public String toString() {
String mm = "" + curTime / 60;
String ss = "" + curTime % 60;
// 1자리 숫자인 경우 앞에 0을 붙여서 "분:초" 형식으로 만듦
if (mm.length() == 1)
mm = "0" + mm;
if (ss.length() == 1)
ss = "0" + ss;
return mm + ":" + ss; // 최종 결과 반환
}
}
728x90
'프로그래머스(Java) > Level 1' 카테고리의 다른 글
[프로그래머스] [PCCE 기출문제] 10번 / 공원 (0) | 2024.10.01 |
---|---|
[프로그래머스] [PCCE 기출문제] 9번 / 지폐 접기 (0) | 2024.09.09 |
[프로그래머스] 성격 유형 검사하기 (0) | 2024.08.29 |
[프로그래머스] 바탕화면 정리 (0) | 2024.08.29 |
[프로그래머스] 개인정보 수집 유효기간 (0) | 2024.08.27 |