알고리즘/[python] 백준 BOJ
[python] 백준 2283 구간 자르기
Alan_Kim
2023. 6. 26. 10:25
728x90
반응형
https://www.acmicpc.net/problem/2283
2283번: 구간 자르기
1번째 줄에 정수 N, K(1 ≤ N ≤ 1,000, 1 ≤ K ≤ 1,000,000,000)가 주어진다. 2~N+1번째 줄에 각 구간의 왼쪽 끝점과 오른쪽 끝점의 위치가 주어진다. 양 끝점의 위치는 0 이상 1,000,000 이하의 정수이다.
www.acmicpc.net
문제 해결
- 리스트 인덱스를 x좌표로 하여 막대의 좌표 ( ex: (3,7)이면 vertical[3:7]에 +1씩 더해서 길이를 측정할 수 있도록 한다.)로 나타낸다.
- 원하는 만큼의 길이(k)가 안나오면 끝점(r)를 1씩 높여서 해당되는 길이만큼 증가시키고 그보다 크게 나오면 시작점(l)를 1씩 높여서 해당되는 길이만큼 줄이면서 원하는 값이 나오는지 측정한다.
CODE
import sys
n, k = map(int, input().split())
vertical = [0]*1000001
for _ in range(n):
start, end = map(int, input().split())
for i in range(start,end):
vertical[i] += 1
l, r, val = 0, 0, 0
flag = False
while 0<=l<=r and r<1000001:
if val==k:
flag = True
break
elif val<k:
val += vertical[r]
r += 1
else:
val -= vertical[l]
l += 1
if flag: print(l, r,sep=' ')
else:
print(0, 0,sep=' ')
728x90
반응형