[BOJ][Python]수열 #2491
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))
나름 되게 머리써서 구현했다고 생각했는데, 다른사람의 풀이를 보니 뭔가 간단한 길을 돌아돌아 풀어낸 느낌이었다...ㅠ
Author And Source
이 문제에 관하여([BOJ][Python]수열 #2491), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mein-figur/BOJPython수열-2491저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)