[PYTHON/파이썬] 2486 오르막길

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

 

2846번: 오르막길

상근이는 자전거를 타고 등교한다. 자전거 길은 오르막길, 내리막길, 평지로 이루어져 있다. 상근이는 개강 첫 날 자전거를 타고 가면서 일정 거리마다 높이를 측정했다. 상근이는 가장 큰 오르

www.acmicpc.net

문제 풀이

  • 입력값이 [1,2,1,4,6]이면
  1. 변화크기를 리스트에 저장한다. d = [1,-1,3,2]
  2. 변화크기 리스트의 값들을 비교하면서 더한다.
    • 0보다 작은 값이 나오면 더하는 것을 멈추고 지금까지 더한 값을 새로운 리스트에 담는다. [1 ,5]
  3. max로 최댓값을 출력한다.

soltuion - 시도/성공

import sys
N = int(sys.stdin.readline().strip())
pi = list(map(int,sys.stdin.readline().strip().split()))

# 오르막의 크기
d =[pi[i+1] - pi[i] for i in range(len(pi)-1)]

total_list = []
total = 0
for j in range(len(d)):
    # 변화크기가 양수이면 total에 더해준다.
    if d[j] > 0:
        total += d[j]
    # 변화크기가 음수이면 total에 더하는 것을 멈추고 list에 누적합을 담고 total을 초기화시켜준다.
    else:
        total_list.append(total)
        total = 0
# 마지막까지 음수가 나오지 않으면 젤 마지막 누적합을 리스트에 추가해준다.
total_list.append(total)
print(max(total_list))

보완할 점

  • 변화크기를 따로 리스트에 담지 않고 변화크기를 계산해 바로 누적합한다.
    • 불필요한 메모리를 낭비할 수 있다.

soltuion - 최종코드/성공

import sys
N = int(sys.stdin.readline().strip())
pi = list(map(int,sys.stdin.readline().strip().split()))

total_sum = 0
total_sum_list = []
for i in range(N-1):
    # 변화크기기가 양수이면 total_sum에 더해준다.
    if pi[i+1] - pi[i] > 0:
        total_sum += pi[i+1] - pi[i]
    else:
        total_sum_list.append(total_sum)
        total_sum = 0
total_sum_list.append(total_sum)
print(max(total_sum_list))

댓글