프론트엔드 개발자 중규리 입니다 ദി ᷇ᵕ ᷆ ) 자세히보기

PS/문제풀이

백준 2631 줄세우기 Python

중규리 2024. 1. 22. 13:08

🐸 문제 정보

 

2631번: 줄세우기

KOI 어린이집에는 N명의 아이들이 있다. 오늘은 소풍을 가는 날이다. 선생님은 1번부터 N번까지 번호가 적혀있는 번호표를 아이들의 가슴에 붙여주었다. 선생님은 아이들을 효과적으로 보호하기

www.acmicpc.net

 

🤖 알고리즘

DP

 

⏱️ 풀이 시간

failed

 

📝 풀이

오랜만에 failed...

문제를 보고 DP라는 것은 알았으나, 도저히 점화식과 아이디어가 떠오르지 않았다.

그리고 결국 검색해서 풀이를 살펴보니 LIS(가장 긴 증가하는 부분수열) 문제라는 것을 깨달았다.

유사한 문제는 이전에도 풀어본 적 있는데, 이 문제가 도대체 왜 LIS 문제지? 라고 생각했으나

이 문제의 입력에서 도출되는 가장 긴 증가하는 부분 수열은 곧 제대로 된 위치에 있는 아이들과 같기 때문에 모든 아이의 수에서 제대로 된 위치에 있는 아이의 수를 빼주면 정답이라는 것을 알게되었다.

 

유사한 문제는 아래에 있다.

 

11053번: 가장 긴 증가하는 부분 수열

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

www.acmicpc.net

 

🧑‍💻 나의 답

# pypy3

import sys
input = sys.stdin.readline

n = int(input().rstrip())
nums = [int(input().rstrip()) for _ in range(n)]
dp = [1] * n

for i in range(n):
    for j in range(i):
        if nums[j] < nums[i]:
            dp[i] = max(dp[j] + 1, dp[i])

print(n - max(dp))

'PS > 문제풀이' 카테고리의 다른 글

백준 22233 가희와 키워드 Python  (0) 2024.01.23
백준 13144 List of Unique Numbers Python  (0) 2024.01.22
백준 5972 택배 배송 Python  (1) 2024.01.22
백준 2531 회전 초밥 Python  (0) 2024.01.22
백준 3758 KCPC Python  (1) 2024.01.22