PS/프로그래머스

[Python] 1번 / 동영상 재생기

s_omi 2024. 11. 2. 10:05

✏️ 문제

 

문제 파악

조건이 너~~~~~무 많았다........... 그래서 반례를 잘 생각해봐야 하는 문제 

내가 정리한 조건은 다음과 같다.

  • 오프닝 시작 위치 <= 처음 시작 위치 < 오프닝 끝나는 위치이면 시작 위치 = 오프닝 끝나는 위치 
  • 명령 처리 후 시작 위치 대해
    • 초가 59초 이상이면 분 += 1, 초 %= 60
    • 초가 0초 이하이면 분 -= 1, 초 += 60
    • 분과 초가 00:00 이하이면 분 = 0, 초 = 0
    • 비디오 시간보다 크면 분 = 비디오 시작 분, 초 = 비디오 시작 초
    • 오프닝 시작 위치 <= 처음 시작 위치 < 오프닝 끝나는 위치이면 시작 위치 = 오프닝 끝나는 위치

그리고 난 분과 초를 처리하는 과정에서 

2차원 배열 total에 대해 total[1] = total[0] 이런식으로 값을 주고 total[0]에 대한 값을 건들인 적이 없는데 나중에 출력해보니 total[1]을 바꿀때마다 total[0] 값이 변했었다.

아마 복사와 관련된 문제인 거 같은데 

대신에 total[1] = [total[0][0], total[0][1]] 이런 식으로 값을 주니 해결되었다.. 

 

 

코드

def opening(total):
    start = (total[2][0] * 60) + total[2][1]
    end = (total[3][0] * 60) + total[3][1]
    cur = (total[1][0] * 60) + total[1][1]
    
    if start <= cur < end:
        total[1] = [total[3][0], total[3][1]]
    
    return total

def solution(video_len, pos, op_start, op_end, commands):
    total = [
        list(map(int, video_len.split(":"))),
        list(map(int, pos.split(":"))),
        list(map(int, op_start.split(":"))),
        list(map(int, op_end.split(":")))
    ]
    
    # 오프닝 구간 확인
    opening(total)
        
    # commands 처리
    for c in commands:
        if c == "next":
            total[1][1] += 10
        else:
            total[1][1] -= 10
        
        # 초 단위 조정: 60초 이상
        if total[1][1] >= 60:
            total[1][0] += total[1][1] // 60
            total[1][1] %= 60
        # 초 단위 조정: 0초 이하
        elif total[1][1] < 0:
            total[1][0] -= 1
            total[1][1] += 60 

        # 0:0 이하
        if total[1][0] < 0 or (total[1][0] == 0 and total[1][1] < 0):
            total[1] = [0, 0] 
        
        # video_len 초과
        if total[1][0] > total[0][0] or (total[1][0] == total[0][0] and total[1][1] > total[0][1]):
            total[1] = [total[0][0], total[0][1]]
        
        opening(total)
    
    m = '0' + str(total[1][0]) if 0 <= total[1][0] < 10 else str(total[1][0])
    s = '0' + str(total[1][1]) if 0 <= total[1][1] < 10 else str(total[1][1])
    return m + ':' + s

 

'PS > 프로그래머스' 카테고리의 다른 글

[Python] 성격 유형 검사하기  (0) 2024.11.03
[Python] 신고 결과 받기  (0) 2024.11.02
[Python] 개인정보 수집 유효기간  (1) 2024.11.02
[Python] 10번 / 공원  (0) 2024.11.02
[Python] 공원 산책  (0) 2024.11.01