Coding Test/BaekJoon_Python

백준 2565 <전깃줄> Python

JunOnJuly 2024. 12. 2. 14:09
728x90

https://www.acmicpc.net/problem/2565


최대 증가 부분 수열 (LIS) 문제입니다.

연결된 전선의 목적 인덱스가 점차 증가하는 방향이어야 전선끼리 교차하지 않기 때문에 시작 인덱스를 기준으로 정렬한 뒤 목적 인덱스로 LIS 를 풀어주면 됩니다.


import sys

input = sys.stdin.readline


def solution(N, lines):
    # 라인 정리
    lines = [l[1] for l in sorted(lines, key=lambda x:x[0])]
    # 증가하는 최대 부분 수열 길이
    max_inc = [1 for _ in range(N)]
    # 순회
    for l in range(1, N):
        # 자신보다 이전 전선이고 자신보다 작은 목표 전선을 갖고 있는 최대 길이중 최댓값
        # [0] 은 리스트가 빌 때를 대비
        max_inc[l] = max([0] + [max_inc[m] for m in range(l) if lines[m] < lines[l]]) + 1
    
    print(N - max(max_inc))


# 입력
N = int(input().strip())
lines = [list(map(int, input().strip().split())) for _ in range(N)]

solution(N, lines)
728x90