본문 바로가기

파이썬

[백준 파이썬] 2565번 전깃줄

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

 

2565번: 전깃줄

첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는

www.acmicpc.net

코드

import sys
input = sys.stdin.readline
n = int(input())
arr = [list(map(int, input().split())) for _ in range(n)]
arr.sort(key = lambda x:x[0])

dp = [1] * n

# 현재 번호보다 적은 번호 중에 현재 연결된 전깃줄보다 높은 번호가 있으면 겹치므로 지워야한다.
# 그래서 최장길이를 구하여 저장하고 비교 반복
for i in range(n):
    for j in range(i):
        if arr[i][1] > arr[j][1]:
            dp[i] = max(dp[i], dp[j]+1)

print(n-max(dp))

 

<풀이방법>

dp로 현재 번호보다 적은 번호 중에 현재 연결된 전깃줄보다 높은 번호가 있으면 지우고 최장길이를 구함. 

그리고 항상 최장길이를 비교하여 업데이트 해서 저장해둔다.

 

dp문제는 항상 어려운 것 같다 ㅜㅜ

 

 

'파이썬' 카테고리의 다른 글

[프로그래머스 파이썬] Lv2. 멀쩡한 사각형  (1) 2022.08.23
[백준 파이썬] 2493번 탑  (0) 2022.08.22
[BOJ PYTHON] 2343번 기타레슨  (0) 2022.08.20
[BOJ PYTHON] 1080번 행렬  (0) 2022.08.17
[BOJ][PYTHON] 6603번 로또  (0) 2022.08.15