새소식

PS/백준

[백준/11722] 가장 긴 감소하는 부분 수열 (Python)

  • -

Problem : https://www.acmicpc.net/problem/11722

 

11722번: 가장 긴 감소하는 부분 수열

수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} 

www.acmicpc.net

 

Difficulty : Silver 2

 

Status : Solved

 

Time : 00:05:48

 


 

문제 설명

 

더보기

 

수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오.

예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10}  이고, 길이는 3이다.

 

 

입력 및 출력

 

더보기

입력

 

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000)이 주어진다.

둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000)

 

출력

 

첫째 줄에 수열 A의 가장 긴 감소하는 부분 수열의 길이를 출력한다.

 

입력 예시

 

6
10 30 10 20 20 10

 

출력 예시

 

3

 

 


 

풀이

 

2023.06.03 - [알고리즘 문제/백준] - [백준/11055] 가장 큰 증가하는 부분 수열 (Python)

 

[백준/11055] 가장 큰 증가하는 부분 수열 (Python)

Problem : https://www.acmicpc.net/problem/11055 Difficulty : Silver 2 Status : Solved Time : 00:13:25 문제 설명 더보기 수열 A가 주어졌을 때, 그 수열의 증가하는 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램

magentino.tistory.com

 

위 문제와 동일하다!

 

풀이 코드

N = int(input())
num_list = list(map(int, input().split()))
answer_list = list()

def binary_search(num) :
  start, end = 0, len(answer_list)
  while start < end :
    mid = (start + end) // 2
    if num < answer_list[mid] :
      start = mid + 1
    else :
      end = mid

  return end

for num in num_list :
  idx = binary_search(num)
  if idx == len(answer_list) :
    answer_list.append(num)
  else :
    answer_list[idx] = num

print(len(answer_list))

풀이 완료!

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.