For Programmer

백준 2847번 파이썬 문제풀이(게임을 만든 동준이) 본문

코팅테스트/백준 문제 모음

백준 2847번 파이썬 문제풀이(게임을 만든 동준이)

유지광이 2022. 5. 5. 21:59
728x90

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

 

2847번: 게임을 만든 동준이

학교에서 그래픽스 수업을 들은 동준이는 수업시간에 들은 내용을 바탕으로 스마트폰 게임을 만들었다. 게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어

www.acmicpc.net

 


처음에 전체를 N번 동안 돌고 각 반복문마다 앞에서 앞,뒤(i,i+1) 값을 보면서 앞의 값이 뒤의값보다 크다면 앞의 값을 (앞의값 - 뒤의 값 + 1)으로 바꿔주는 방식으로 생각했다.

다행이 N = 100이라 O(N^2)이 통과되었지만 N 이 10000이상일때도 해당 문제를 풀려면 O(N)방식을 생각해야한다. 따라서 그 방식이 뒤에서부터 값을 비교하며 만약 앞에값이 뒤값보다 더 크다면 해당 값을 앞의값 - 뒤의 값 + 1 로 바꿔주는 고 그 값을 계속 정답변수에 더해주는 방식이다. 

N = int(input())

arr = [int(input()) for _ in range(N)]

cnt = 0

for i in range(1, N)[::-1]:

    if arr[i - 1] >= arr[i]:
        cnt += (arr[i - 1] - arr[i] + 1)
        arr[i - 1] -= (arr[i - 1] - arr[i] + 1)

print(cnt)

 

728x90
Comments