https://www.acmicpc.net/problem/28324
[문제 조건]
스케이트를 타고 전진하는데, 구간마다 제한속도를 입력받는다.
속력을 높일 때는 원하는 만큼 높일 수 있지만, 속력을 낮추는 경우에는 마지막으로 방문했던 지점에서의 속력에서 1만큼 낮출 수 있다.
마지막 속력은 꼭 0이어야 한다.
[해결 방법]
마지막 속력은 꼭 0이어야 하므로 마지막 구간의 속력은 무조건 1이어야 한다. 그래서 입력받은 리스트의 뒤에서 부터 반복문으로 접근했다.
count의 초기값을 1로 설정하고, 리스트의 요소를 뒤에서부터 하나씩 보면서 count와 비교한다.
만약 count가 제한속도보다 작거나 같다면 속력이 count여야 하므로 result에 count를 더하고 count에 1을 추가해준다.
만약 count가 제한속도보다 크다면 속력이 제한속도여야하므로 result에 제한속도를 더한다.
여기서 주의해야할 점이 있는데, 속력이 제한속도일 경우 다음 나오는 속력은 제한속도보다 1 클 수 있기때문에 count를 제한속도 + 1로 설정해주어야 한다. (이거 생각 못하고 한 번 틀림..)
ex)
11
6 5 7 8 1 9 8 7 1 4 2
답: 28
num = int(input()) #입력 개수
vel = list(map(int,input().split())) #속력 제한
count = 1
result = 0
for i in range(num-1,-1,-1):
if count <= vel[i]:
result += count
#print(f'count 더함 result:{result}')
count += 1
else:
result += vel[i]
#print(f'vel 더함 result:{result}')
count = vel[i] + 1
print(result)
'백준' 카테고리의 다른 글
[백준] 13567번: 로봇 (0) | 2024.11.19 |
---|---|
[백준] 14493번: 과일노리(파이썬) (1) | 2024.10.25 |
[백준] 2622번: 삼각형만들기(파이썬) (1) | 2024.10.19 |
[백준] 15904번: UCPC는 무엇의 약자일까?(파이썬) (0) | 2024.10.19 |
[백준] 2805번: 나무 자르기 (파이썬) (1) | 2024.10.09 |