[BOJ] Q2491 수열

Question

Language: Python

Difficulty: Silver 4

오름차순용 리스트와 내림차순 리스트 2개를 이용해서 증가하면 오름차순 리스트의 값을 변화 시키고, 감소하면 내림차순 리스트의 값을 변화시킨다.

이차원 리스트에 대해 최대값을 찾는 함수 사용

max(map(max,inclinations))

각 행에 대해 최대값들을 찾아서, 그 중 최대값을 찾는 과정을 위와 같이 간략하게 표현할 수 있다.

Solution

def solution():
    inclinations=[[1] *2 for _ in range(length)]
    max_length=0
    #0 for incline 1 for decline

    for i in range(length-1):
        if datas[i]<=datas[i+1]:
            inclinations[i+1][0]=(inclinations[i][0]+1)
        if datas[i] >= datas[i+1]:
            inclinations[i+1][1]=(inclinations[i][1]+1)

    max_length=(max(map(max,inclinations)))
    print(max_length)

if __name__ == "__main__":
    length=int(input())
    datas=list(map(int,input().split()))
    solution()

Solution2

해당 문제는 투포인터로도 생각해볼 수 있는 문제이다.

import os
def solution():
    max_length=0
    start,end=0,0

    while end < length-1:
        if datas[end] > datas[end+1]:
            start=end+1
        end+=1
        max_length=max(max_length,end-start+1)
    max_length=max(max_length,end-start+1)
    start,end=0,0
    while end < length-1:
        if datas[end] < datas[end+1]:
            start=end
        end+=1
        max_length=max(max_length,end-start+1) 
    max_length=max(max_length,end-start+1)    
    print(max_length)  

댓글남기기