https://www.acmicpc.net/problem/2847
2847번: 게임을 만든 동준이
학교에서 그래픽스 수업을 들은 동준이는 수업시간에 들은 내용을 바탕으로 스마트폰 게임을 만들었다. 게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어
www.acmicpc.net
n = int(input())
arr = []
for i in range(n):
arr.append(int(input()))
cnt = 0
for i in range(n-1, 0, -1):
if arr[i] <= arr[i-1]:
# 현재보다 현재 - 1 값이 같거나 크다면
while arr[i] <= arr[i-1]:
# 현재값이 더 클때까지
cnt += 1
arr[i-1] = arr[i-1] - 1
print(cnt)
문제를 쭉 풀어보다가 내가 그리디 문제를 공통적으로 약하다는 생각이 문득 들었다.
때문에 앞으로 몇 번은 그리디를 집중적으로 풀어볼까 한다.
각설하고 이 문제를 설명하자면, 이 문제는 배열의 마지막 인덱스부터 시작해야한다.
문제 조건이 앞에 점수보다 뒤에 나오는 점수가 더 크기 때문에
최적의 해란 배열의 마지막번째를 가장 큰 값으로 생각한 뒤, 점차 낮은 레벨의 점수들을 -1씩 깎아내리는 것이다.
'알고리즘' 카테고리의 다른 글
파이썬) 폴리오미노 -BOJ (0) | 2023.11.07 |
---|---|
파이썬) 컵홀더 - BOJ (0) | 2023.11.07 |
파이썬) 0 만들기 - BOJ (0) | 2023.11.06 |
파이썬) 카드게임 - BOJ (0) | 2023.11.06 |
파이썬) 암호 만들기 - BOJ (0) | 2023.11.06 |