Coding Test/BaekJoon_Python

백준 28324 <스케이트 연습> Python

JunOnJuly 2025. 1. 30. 15:39
728x90

https://www.acmicpc.net/problem/28324


그리디 알고리즘 문제입니다.

 

순서대로 진행할 때 '올리는 건 제한이 없지만 내릴 때는 1씩 밖에 못내린다 / 시작과 마지막은 0 이어야 한다' 라는 사실상 올릴 수 있는 한계가 동적이라는 말을 하고 있습니다.

 

그렇다면 반대로 진행해보겠습니다.

'올릴 때는 1씩 밖에 못올리지만 내리는 건 제한이 없다 / 시작과 마지막은 0 이어야 한다' 로 조건이 바뀌면 상당히 편해집니다. 시작은 0 으로 시작하면 되고, 마지막은 그냥 마지막 속도를 전부 빼주면 됩니다.

 

그냥 최대 제한에 맞춰 1씩 더해주고 제한만큼 내려주고를 반복해주면 풀 수 있습니다.


import sys

input = sys.stdin.readline


def solution(N, limits):
    # limits 반전
    limits = list(reversed(limits))
    # 속도 총 합
    v_sum = 0
    # 현재 속도
    now_v = 0
    # 순회
    for limit in limits:
        # 현재 속도 + 1 이 제한 이하면 
        if now_v + 1 <= limit:
            # 올리기
            now_v += 1
        
        # 제한 초과면
        else:
            # 한계치까지 내림
            now_v = limit

        # 속도 합
        v_sum += now_v
    
    print(v_sum)


# 입력
N = int(input().strip())
limits = list(map(int, input().strip().split()))

solution(N, limits)
728x90

'Coding Test > BaekJoon_Python' 카테고리의 다른 글

백준 1013 <Contact> Python  (0) 2025.02.02
백준 17472 <다리 만들기 2> Python  (0) 2025.01.31
백준 3151 <합이 0> Python  (0) 2025.01.25
백준 14567 <선수과목> Python  (0) 2025.01.24
백준 2056 <작업> Python  (0) 2025.01.23