728x90
🔗 문제 링크
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📌 문제 개요
동영상의 현재 재생 위치에서 prev, next 명령을 수행하는 문제이다.
- prev는 현재 위치에서 10초 전으로 이동한다.
- next는 현재 위치에서 10초 후로 이동한다.
- 현재 위치가 오프닝 구간(op_start ~ op_end)에 포함되면 자동으로 오프닝 종료 시점(op_end)으로 이동한다.
모든 명령을 수행한 뒤 최종 재생 위치를 "mm:ss" 형식으로 반환하면 된다.
📌 접근 방법
문자열 형태의 시간을 직접 계산하면 복잡해지므로 모든 시간을 초(second) 단위로 변환하여 처리한다.
먼저 시작 위치가 오프닝 구간인지 확인하고 필요하면 오프닝 종료 위치로 이동한다.
이후 모든 명령을 순서대로 수행하면서 처리한다
- prev → 최대 0초까지 이동
- next → 최대 영상 길이까지 이동
명령이 끝날 때마다 현재 위치가 오프닝 구간인지 다시 확인하여 자동으로 op_end로 이동시킨다.
마지막에는 초 단위를 다시 "mm:ss" 형식으로 변환하여 반환한다.
📌 핵심 아이디어
1. 시간을 초 단위로 변환
문자열 비교 대신 정수 계산으로 처리하면 훨씬 간단하다.
minute * 60 + second
2. prev / next 처리
pos = Math.max(0, pos - 10);
pos = Math.min(videoLen, pos + 10);
영상 범위를 벗어나지 않도록 처리한다.
3. 오프닝 자동 건너뛰기
명령 수행 후마다 반드시 확인해야 한다.
또한 초기 시작 위치도 먼저 검사해야 한다.
if (opStart <= pos && pos <= opEnd) {
pos = opEnd;
}
4. 다시 mm:ss 형태로 변환
두 자리 형식을 유지하여 반환한다.
String.format("%02d:%02d", minute, second)
📌 전체 코드
class Solution {
public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) {
int videoLen = toSecond(video_len);
int current = toSecond(pos);
int opStart = toSecond(op_start);
int opEnd = toSecond(op_end);
current = skipOpening(current, opStart, opEnd);
for (String command : commands) {
if (command.equals("prev")) {
current = Math.max(0, current - 10);
} else {
current = Math.min(videoLen, current + 10);
}
current = skipOpening(current, opStart, opEnd);
}
return toTime(current);
}
private int toSecond(String time) {
String[] arr = time.split(":");
return Integer.parseInt(arr[0]) * 60 + Integer.parseInt(arr[1]);
}
private int skipOpening(int current, int opStart, int opEnd) {
if (opStart <= current && current <= opEnd) {
return opEnd;
}
return current;
}
private String toTime(int second) {
int min = second / 60;
int sec = second % 60;
return String.format("%02d:%02d", min, sec);
}
}
📄 정리
- 시간을 문자열이 아닌 초 단위 정수로 변환하면 구현이 쉬워진다.
- prev, next는 Math.max(), Math.min()으로 범위를 쉽게 처리할 수 있다.
- 시작 위치와 명령 수행 후 모두 오프닝 구간을 확인해야 한다.
- 구현 자체는 단순하지만 조건 처리 순서가 중요한 시뮬레이션 문제이다.
728x90
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
| 프로그래머스 분수의 덧셈 JAVA 풀이 (수학, 구현, 유클리드 호제법) (0) | 2026.06.30 |
|---|---|
| 프로그래머스 로또의 최고 순위와 최저 순위 JAVA 풀이 (완전탐색, 구현) (0) | 2026.06.29 |
| 프로그래머스 햄버거 만들기 JAVA 풀이 (스택, 구현) (0) | 2026.06.27 |
| 프로그래머스 대충 만든 자판 JAVA 풀이 (HashMap, 구현) (0) | 2026.06.26 |
| 프로그래머스 정수를 나선형으로 배치하기 JAVA 풀이 (구현, 시뮬레이션) (0) | 2026.06.26 |