https://www.acmicpc.net/problem/2491
array_len = int(input())
array = list(map(int,input().split()))
result = 1
#길이가 2이상인 경우만 계산
if array_len != 1 :
#이전 값 설정, 인덱스 설정
#갯수 세기용, 같은 정수가 나오는 경우
previous = array[0]
idx = 1
cnt, keep = 1, 0
#커지는지, 작아지는지 판단하는 flag(양의 방향 1, 음의 방향 -1)
flag = 0
while idx < array_len:
now = array[idx]
#값이 같은 경우
if now == previous :
keep += 1
#커지는 경우
elif now > previous:
if flag == 1:
cnt += keep + 1
elif flag == 0 :
flag = 1
cnt += keep + 1
else :
flag = 1
cnt = 2 + keep
keep = 0
#작아지는 경우
else:
if flag == -1:
cnt += keep + 1
elif flag == 0 :
flag = -1
cnt += keep + 1
else :
flag = -1
cnt = 2 + keep
keep = 0
if result < cnt + keep :
result = cnt + keep
previous = now
idx += 1
print(result)
keep
이라는 변수를 활용하여 같은 값이 유지되는 경우, cnt
에 값을 더하지 않고 keep
에 추가하였다가 나중에 연산https://home-body.tistory.com/108
array_len = int(input())
array = list(map(int,input().split()))
cnt, result = 1, 1
#커지는 케이스
for idx in range(1, array_len):
if array[idx] >= array[idx-1]:
cnt += 1
else :
cnt = 1
if cnt > result:
result = cnt
#작아지는 케이스
cnt = 1
for idx in range(1, array_len):
if array[idx] <= array[idx-1]:
cnt += 1
else :
cnt = 1
if cnt > result:
result = cnt
print(result)
시간적인 측면에서는 내 코드가 더 좋았지만, 큰 차이가 나타나지는 않았다.(둘다 O(n))
나름 되게 머리써서 구현했다고 생각했는데, 다른사람의 풀이를 보니 뭔가 간단한 길을 돌아돌아 풀어낸 느낌이었다...ㅠ