💻 문제 풀이 접근 방법
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로 한번씩 감소시켜 주는 것도 가능한데, 이런경우 속도면에서 꽤 차이가 나서 한번에 빼주는 게 더 빠르다
'알고리즘 문제 풀기 > 백준(Baekjoon)' 카테고리의 다른 글
[백준 알고리즘] 1259. 펠린드롬 수_ 파이썬 (0) | 2021.02.19 |
---|---|
[백준 알고리즘] 8979. 올림픽 _ 파이썬 (0) | 2021.02.15 |
[백준 알고리즘] 2804. 크로스워드 만들기 _ 파이썬 (0) | 2021.02.13 |
[백준 알고리즘] 2953. 나는 요리사다 _ 파이썬 (0) | 2021.02.13 |
[백준 알고리즘] 2851. 슈퍼마리오 _ 파이썬 (2) | 2021.02.13 |