알고리즘 문제 풀기/백준(Baekjoon)

[백준 알고리즘] 2847. 게임을 만든 동준이 _ 파이썬

hibscus 2021. 2. 13. 19:39

 

 

💻 문제 풀이 접근 방법

 

1) 점수 리스트 만들고 

 

2) for 문 돌려서 다음 숫자의 차이 만큼 감소

 

3) 계산하는 값 누적하기

 

 

 

 

🎈 여기서 실수하기 좋은데, 오름차순으로 for문을 돌리며 반례로 레벨 4,  4 5 6 4 가 있습니다.

 

이럴경우 6만 3으로 바꾸고 for문이 끝나게 되서 틀린 정답이 나옵니다.

 

 

그러므로 전체 값을 오름차순으로 만들경우 뒤에서부터 접근해야합니다!!

 

저도 처음에 이걸 간과했어요ㅠㅠ

 

 

# 입력받아서 각 레벨별 점수 리스트 만들기
level = int(input())
scores = [0] * level
for i in range(level):
    scores[i] = int(input())

# 점수 차이만큼 빼주고, cnt에 추가해서 세기
cnt = 0
for i in range(level-1, 0, -1):
    diff = scores[i - 1] - scores[i]
    if diff >= 0:
        scores[i-1] -= diff+1
        cnt += diff+1
print(cnt)

 -1로 한번씩 감소시켜 주는 것도 가능한데, 이런경우 속도면에서 꽤 차이가 나서 한번에 빼주는 게 더 빠르다

 

 

 

 

www.acmicpc.net/problem/2847

 

 

2847번: 게임을 만든 동준이

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

www.acmicpc.net