For Programmer

백준 2565번 파이썬 문제풀이(전깃줄) - DP(탑다운) 본문

코팅테스트/백준 문제 모음

백준 2565번 파이썬 문제풀이(전깃줄) - DP(탑다운)

유지광이 2022. 4. 11. 01:02
728x90


후.... 하루종일 뚫어져라봐도 가장 긴 증가 부분수열의 개수를 구하라는 문제인지를 몰랐다.. 골드 5라고 하는데 아마 LIS가 웰노운이라서 골드 5이지 문제만 보고 LIS 알고리즘을 생각하는건 쉽지 않다..... 

어찌됐든 문제의 접근방식은 전봇대 번호를 기준으로 정렬한 후 연결된 번호들을 기준으로 가장 긴 증가하는 부분수열의 개수를 구한 다음 전체의 전봇대 개수에서 빼주면 된다.

 

N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]

arr.sort(key=lambda x: (x[0]))
arr += [[0, 0]]
dp = [[-1] * (N + 1) for _ in range(N + 1)]


def dfs(cur, pre):
    if cur >= N:
        return 0

    if dp[cur][pre] != -1:
        return dp[cur][pre]

    if arr[cur][1] > arr[pre][1]:
        dp[cur][pre] = max(dfs(cur + 1, cur) + 1, dfs(cur + 1, pre))
    else:
        dp[cur][pre] = dfs(cur + 1, pre)

    return dp[cur][pre]


print(N - dfs(0, -1))
728x90
Comments