문제 링크
https://www.acmicpc.net/problem/2846
문제
상근이는 자전거를 타고 등교한다. 자전거 길은 오르막길, 내리막길, 평지로 이루어져 있다. 상근이는 개강 첫 날 자전거를 타고 가면서 일정 거리마다 높이를 측정했다. 상근이는 가장 큰 오르막길의 크기를 구하려고 한다.
측정한 높이는 길이가 N인 수열로 나타낼 수 있다. 여기서 오르막길은 적어도 2개의 수로 이루어진 높이가 증가하는 부분 수열이다. 오르막길의 크기는 부분 수열의 첫 번째 숫자와 마지막 숫자의 차이이다.
예를 들어, 높이가 다음과 같은 길이 있다고 하자. 12 3 5 7 10 6 1 11. 이 길에는 2 개의 오르막길이 있다. 밑 줄로 표시된 부분 수열이 오르막길이다. 첫 번째 오르막길의 크기는 7이고, 두 번째 오르막길의 크기는 10이다. 높이가 12와 6인 곳은 오르막길에 속하지 않는다.
가장 큰 오르막길을 구하는 프로그램을 작성하시오
풀이
높이를 리스트 li에 입력받고 크기를 비교한다.
오르막길이 생성되면 a = (다음 높이) - (해당 높이)를 해서 임시 크기를 구한다.
오르막길이 끊기면 오르막길 높이인 a값을 리스트 re에 추가하고 a는 0으로 초기화한다.
반복문에서 가장 마지막 높이는 해당이 안되므로 re.append(a)를 따로 추가해준다.
마지막으로 리스트 re에 추가한 오르막길 크기 중 최댓값을 출력한다.
코드
n = int(input())
li = list(map(int, input().split()))
a = 0
re = []
for i in range(n-1):
if li[i] < li[i+1]:
a += li[i+1] - li[i]
else:
re.append(a)
a = 0
re.append(a)
print(max(re))
막힌 부분
처음에는 반복문 이후에 re.append(a)를 작성하지 않아서 마지막 높이가 오르막길에 포함될 때는 계산이 되지 않았다.
그 다음에는 반복문 안에 i == n - 1일 때의 조건을 추가해서 시도했지만 실패하고 반복문 밖에 append를 추가했다.
'Algorithm > 백준 (BOJ)' 카테고리의 다른 글
[Python] 백준/BOJ 1373번: 2진수 8진수 (0) | 2021.10.02 |
---|---|
[Python] 백준/BOJ 2588번: 곱셈 (0) | 2021.10.02 |
[Python] 백준/BOJ 10869번: 사칙연산 (0) | 2021.10.02 |
[Python] 백준/BOJ 2754번: 학점계산 (0) | 2021.08.10 |
[Python] 백준/BOJ 4999번: 아! (0) | 2021.08.10 |