문제풀이/이진탐색

* [파이썬] [이진탐색] 백준 3745 오름세

승무_ 2022. 1. 18. 21:51

문제 정의

주식투자를 좋아하는 정인이는 주가의 오름세를 살펴보려고 한다.
정인이는 n일 동안 매일 주가를 적어놓았고, 여기서 오름세를 찾아보려고 한다.
n일 동안의 주가를 p1, p2, ..., pn이라고 했을 때, 오름세란 부분수열 pi1 < pi2 < ... < pik (i1 < i2 < ... ik)을 말한다.
n일 동안 주가가 주어졌을 때, 가장 긴 오름세를 찾는 프로그램을 작성하시오.

 

입력

입력은 여러개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 주가를 관찰한 날의 수 N (N ≤ 100000)이 주어진다. 둘째 줄에는 관찰한 주가가 첫 날부터 순서대로 주어진다. 주가는 한 개 이상의 공백으로 구분되어 있으며, 그 외의 위치에서도 자유롭게 나올 수 있다. 주가는 100,000보다 작거나 같은 자연수이다.

 

출력

각 테스트 케이스에 대해서 입력으로 주어진 주가의 가장 긴 오름세의 길이를 출력한다.

 

예제 입력 1

6
5 2 1 4 5 3
3
1 1 1
4
4 3 2 1

 

예제 출력 1

3
1
1

코드

from bisect import bisect_left

try: 
    while 1:
        N=int(input())
        array=list(map(int,input().split()))
            
        temp_array=[]
            
        for i in array:
            index=bisect_left(temp_array,i)
            
            if len(temp_array)!=index:
                temp_array[index]=i
            else:
                temp_array.append(i)
            
        print(len(temp_array))    
except:exit()

생각 정리

EOFError가 나왔는데

try catch문에서 EOF를 감지해서 EOF일 때 exit()하는 방법으로 해결했다.