[그리디] 백준 14659: 한조서열정리하고옴ㅋㅋ

LeeJE20·2021년 5월 15일
0

파이썬 문제풀이

목록 보기
4/26
"""
https://www.acmicpc.net/problem/14659


시작: 21.05.15 21:40
끝: 21.05.15 22:42
성공: correct

[아이디어]
그냥 쭉 훑으면서 기준값보다 커지는 순간까지 카운트한다.
카운트랑 max랑 비교해서 max 업데이트, count 초기화


[시간복잡도]
O(n)


[실수]
[3 2 1] 처럼 마지막까지 작아진 경우(더 이상 커진 경우가 없을 경우)에는 for문의 if에 안 걸림
따라서 max_num이 제대로 계산될 수 없다.

아이디어를 구현할 때 끝 값에 유념하도록 하자.
처음, 중간, 끝을 나누어서 생각하자.

[검색]
1. 빠른 입력

    import sys
    input = sys.stdin.readline

    N = int(input())
    arr = list(map(int, input().split()))
    
2. 공백으로 구분된 숫자 입력

list(map(int, input().split()))


[개선/추가사항]

다른 사람 풀이를 보니

arr = list(map(int, input().split()))
arr.append(100001)

이런 식으로 arr의 끝에 아주 큰 값을 넣어 for문의 if에서 걸리게 해두었다.
이렇게 배열에 문제에서 주어지지 않은 값을 추가하는 식으로도 풀이 가능하다.


"""

#import sys
#input = sys.stdin.readline().rstrip()

N = int(input())
# print(N)

arr = list(map(int, input().split()))
# arr=[int(x) for x in input().split()]
# print(arr)

count = 0
start = 0 #기준값
max_num = -1
for i in arr:
    if i > start:
        start = i
        count = 0
    else:
        # 기준값보다 커지는 순간까지 카운트한다.
        count += 1

# [3 2 1] 처럼 마지막까지 작아진 경우(더 이상 커진 경우가 없을 경우, for문의 if에 안 걸림)
max_num = max(count, max_num)
        
print(max_num)

0개의 댓글