

문제를 살펴보면 가장 긴 증가하는 부분 수열의 응용 문제임을 확인할 수 있다
연결되는 위치를 A를 기준으로 정렬한 후에, 그 중에서 가장 긴 부분 수열의 길이를 찾고, 이를 입력받은 수에서 빼면 된다
그 수가 없애야 하는 전깃줄의 최소 개수가 되기 때문이다
그래서 리스트를 만들어 각 줄마다 연결된 번호 위치를 저장해주었고, 각 index의 최대 길이를 찾기 위한 리스트를 만든다
이후 첫번째 for문은 LIS 확인을 위해, 두번째 for문은 조건을 만족한 경우 최대 길이를 저장하는 리스트를 업데이트해준다
최종적으로 리스트의 최댓값이 겹치지 않는 경우의 최대 전깃줄의 개수이다
따라서 정답은 처음 입력받은 전깃줄의 개수에서 뺀 값이 없애야 하는 전깃줄의 최소 개수임을 알 수 있다
num = int(input())
point = []
for _ in range(num):
point.append(list(map(int, input().split())))
point = sorted(point, key = lambda x : x[0])
result = [1] * num
for i in range(num):
for j in range(i):
if point[j][1] < point[i][1]:
result[i] = max(result[i], result[j] + 1)
print(num - max(result))


'Baekjoon' 카테고리의 다른 글
| [Baekjoon]백준 12865 평범한 배낭(골드 5) - Python (0) | 2025.01.14 |
|---|---|
| [Baekjoon]백준 9251 LCS(골드 5) - Python (0) | 2025.01.13 |
| [Baekjoon]백준 11054 가장 긴 바이토닉 부분 수열(골드 4) - Python (0) | 2025.01.11 |
| [Baekjoon] 백준 11053 가장 긴 증가하는 부분 수열(실버 2) - Python (0) | 2025.01.10 |
| [Baekjoon] 백준 2156 포도주 시식(실버 1) - Python (0) | 2025.01.09 |