문제 보기 · Level 1 · PCCP 기출문제 1번 · 정답률 44% · 푼 사람 17,804명 (2026-09-30 기준)1
문제
"mm:ss" 형식으로 영상 길이, 현재 위치, 오프닝 시작·끝 시각이 주어진다. prev는 10초 뒤로 가되 0초보다 앞으로는 가지 않는다. next는 10초 앞으로 가되 영상 끝을 넘지 않는다. 재생 위치가 오프닝 구간(시작·끝 포함) 안에 있으면 자동으로 오프닝 끝으로 건너뛴다. 명령을 모두 처리한 뒤 위치를 "mm:ss"로 돌려준다.
- 명령 1~100개
- mm, ss는 0~59
풀이
막히면 한 단계씩 펼친다.
필요한 개념
1단계 · 작은 예로 손으로 풀기
영상 10:00, 현재 01:05, 오프닝 01:00~02:00, 명령 [“next”]
- 시작하자마자 01:05가 오프닝 안이다 → 02:00으로 건너뛴다
- next → 02:10
- 02:10은 오프닝 밖이다
답은 “02:10”이다. 명령을 받기 전에도 오프닝 검사를 해야 한다는 점이 함정이다.
2단계 · 가장 단순한 방법과 그 속도
명령이 100개뿐이라 하나씩 그대로 따라 하면 된다. 속도는 문제가 되지 않는다.
3단계 · 핵심 아이디어
- 네 시각을 모두 초로 바꾼다:
분 * 60 + 초. - 오프닝 검사를 함수 하나로 만든다. 위치가
op_start ≤ pos ≤ op_end면op_end로 옮긴다. - 이 검사를 처음에 한 번, 그리고 명령마다 끝에 한 번 한다.
- prev는
max(0, pos - 10), next는min(길이, pos + 10)이다. max와 min이 “넘지 않게” 막는다.
4단계 · 코드 흐름
- 네 시각을 초로 바꾼다.
- 오프닝 검사를 한다.
- 명령마다 prev면 10초 빼고(0 아래로 안 감), next면 10초 더하고(길이 위로 안 감), 오프닝 검사를 한다.
- 위치를
"mm:ss"로 되돌려 돌려준다.
5단계 · 파이썬 코드
def solution(video_len, pos, op_start, op_end, commands):
def sec(t): # "mm:ss" → 초
m, s = map(int, t.split(":"))
return m * 60 + s
length, now = sec(video_len), sec(pos)
start, end = sec(op_start), sec(op_end)
def skip(x): # 오프닝 안이면 끝으로
return end if start <= x <= end else x
now = skip(now)
for c in commands:
if c == "prev":
now = max(0, now - 10)
else:
now = min(length, now + 10)
now = skip(now)
m, s = divmod(now, 60)
return f"{m:02d}:{s:02d}"
max(0, now - 10): 둘 중 큰 값이다. now − 10이 음수가 되면 0을 고른다.start <= x <= end: 시작과 끝을 모두 포함하는 비교다.f"{m:02d}:{s:02d}": 분과 초를 두 자리로 맞춰 붙인다.
6단계 · 실행 추적
영상 10:55 (655초), 현재 00:05 (5초), 오프닝 00:15~06:55 (15~415초), 명령 [“prev”, “next”, “next”]
| 단계 | 위치 계산 | 오프닝 안? | 위치 |
|---|---|---|---|
| 시작 | 5 | 아니오 | 5 |
| prev | max(0, −5) = 0 | 아니오 | 0 |
| next | min(655, 10) = 10 | 아니오 | 10 |
| next | min(655, 20) = 20 | 예 → 415 | 415 |
415초 = 6분 55초 → “06:55”
7단계 · 복잡도와 흔한 실수
명령 C개를 한 번씩 처리하니 \(O(C)\)다.
- 명령 전 처음 위치의 오프닝 검사를 빠뜨린다.
- 오프닝 끝 시각에 정확히 있을 때를 빼고 비교한다(
<). 문제는 끝도 포함한다. "6:55"처럼 두 자리를 맞추지 않는다.
검증: 문제의 예시 3개를 통과했고, 무작위 입력 3,000개에서 “10초 이동을 1초씩 10번으로 나눠 경계에서 멈추는” 다른 풀이와 결과가 같았다 — 07_pg340213_p1.py
-
프로그래머스 스쿨, “[PCCP 기출문제] 1번 / 동영상 재생기” (https://school.programmers.co.kr/learn/courses/30/lessons/340213), 2026-09-30 조회. ↩