728x90
문제
n일 동안의 주식 지수가 날짜 순서대로 주어져 있다. 연속하여 지수가 상승한 날 수의 최대값을 구하는 프로그램을 작성하시오. 예를 들어 15개의 주식 지수가 (26, 22, 10, 25, 27, 29, 45, 23, 24, 25, 40, 26, 37, 13, 24)라면 연속으로 지수가 상승한 날 수의 최대값은 4((10, 25, 27, 29, 45)의 길이 -1)이다.
입력 형식
첫째 줄에는 n이 주어진다. n은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 주식 지수(양의 정수)가 날짜 순서대로 n개 주어진다.
출력 형식
연속하여 지수가 오른 날 수의 최대값을 첫 번째 줄에 출력한다.
작성 코드
a = int(input())
b = list(map(int, input().split()))
result = 0
temp = 0
maximum = 0
if 2 <= a <= 100000:
for i in range(1, len(b)):
temp = temp + 1 if b[i] > b[i-1] else 0
maximum = max(maximum, temp)
print(maximum)
알고리즘
- result, temp는 각각 임의의 숫자로 둔다.
- a와 b의 input을 받은 후 우선 a가 2부터 10만까지의 범위에 해당하는지 확인한다.
- 그 후 i가 1부터 len(b)의 범위일 때에, temp는 b[i]가 b[i-1]보다 클 경우에는 1을 더해 주지만, 그렇지 않은 경우에는 0으로 만든다.
- maximum은 maximum과 temp 사이의 max 함수를 통해, 재귀함수로 구현하여 더 큰 값을 산출하도록 한다.
- 이렇게 할 경우, temp가 증가하다가 0이 되기 직전의 최대값이 maximum에 저장되고, temp가 0이 된 후의 값과 0이 되기 직전의 최대값 사이의 max를 비교하는 형태로 함수가 진행된다.
알고리즘은 이번 2021-1학기 수업을 시작으로 처음 풀어본다. 그래서 처음부터 재귀함수를 생각해서 풀었다면 그렇게 어려운 문제가 전혀 아님에도 불구하고 얼마나 많은 시간을 쏟았는지 모른다.. maximum에 대해 재귀적으로 생각하지 못해서 감을 못잡고 있었다. 경험이 쌓이면 해결해 주겠지..
'CS > 알고리즘' 카테고리의 다른 글
[알고리즘] K와 가장 가까운 수 구하기 (0) | 2021.03.29 |
---|---|
[알고리즘] 고속 거듭제곱 (0) | 2021.03.29 |
[알고리즘] 총 한 번 매수/매도 시 최대 이익 (0) | 2021.03.20 |
[알고리즘] 최대 수익 알고리즘 (0) | 2021.03.17 |
[알고리즘] 동적 계획법(Dynamic Programming) (0) | 2021.03.16 |