-문제: https://www.acmicpc.net/problem/2847
2847번: 게임을 만든 동준이
학교에서 그래픽스 수업을 들은 동준이는 수업시간에 들은 내용을 바탕으로 스마트폰 게임을 만들었다. 게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어
www.acmicpc.net
풀이 안보고 스스로 푼 문제(이게 얼마만인지)
예제2를 보고 i번째 인덱스의 값이 i+1번째 인덱스의 값보다 큰 경우만 계산하면 될 것 같다고 생각했다.
그래서 if s[i]>s[i+1] 를 생각했고
s[i]는 s[i+1]보다 1만큼 작으면 된다
s[i]를 s[i+1]-1로 만들 때 감소한 만큼을 cnt에 저장한다
-풀이:
그런데 위 코드가 예제1번에서는 적용되지 않았다.
이유를 찾아보니 해당 풀이로 하면 [5,5,5]는 [4,4,5]가 되고 cnt는 2가 되어 정답이 아니다.
그래서 다른 방법을 생각해 보니 인덱스를 n-1부터 시작하면 어떨까 생각했다. 그러면 배열의 값이 모두 같아도 순차대로 나열할 수 있을 것이라 생각이 들었다. 그래서 다음과 같이 작성하고 코드 돌리니 정답이었다.
-정답풀이:
n=int(input())
s=[]
cnt=0
for _ in range(n):
s.append(int(input()))
for i in range(n-1,0,-1):
if s[i] <= s[i-1]:
cnt+=(s[i-1]-s[i])+1
s[i-1]=s[i]-1
print(cnt)
'백준 > Greedy' 카테고리의 다른 글
[코딩테스트] 백준 1700번: 멀티탭 스케줄링(어려웠던 문제) (0) | 2022.02.04 |
---|---|
[코딩테스트] 백준 2720번: 세탁소 사장 동혁 (0) | 2022.02.03 |
[코딩테스트] 백준 11000번: 강의실 배정 (0) | 2022.02.02 |
[코딩테스트] 백준 1783번: 병든 나이트 (0) | 2022.02.02 |
[코딩테스트] 백준 1543번: 문서검색 (0) | 2022.01.29 |