728x90
🔗 Problem Link
https://www.acmicpc.net/problem/2565
❔Thinking
- 전봇대 A와 B를 연결하는 전깃줄이 겹치지 않도록 몇개를 제거할 때, 최소한의 개수를 반환한다.
💻Solution
import sys
from bisect import bisect_left
input = sys.stdin.readline
N = int(input().rstrip())
left = []
for _ in range(N):
A, B = map(int, input().split())
left.append([A,B])
left.sort()
def cross_check(line_list:list):
prev = [line_list[0][1]]
for a, b in line_list:
if prev[-1] < b:
prev.append(b)
else:
prev[bisect_left(prev, b)] = b
return len(line_list) - len(prev)
print(cross_check(left))
🗝️keypoint
- 최장 증가 수열 (LIS)를 찾는 문제와 동일하다.
- 총 전깃줄의 개수에서 최장 증가 수열의 개수을 빼면, 제거하는 전깃줄의 수가 나온다.
'코딩테스트 > Python' 카테고리의 다른 글
[Programmers] Level 2. 도넛과 막대 그래프 (0) | 2025.02.12 |
---|---|
[Programmers] Level. 숫자 블록 (0) | 2025.02.11 |
[Programmers] Level 2. 충돌위험 찾기 (0) | 2025.02.09 |
[Baekjoon] 2573. 빙산 (0) | 2025.02.07 |
[Programmers] Level 2. 3xn 타일링 (0) | 2025.02.05 |