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
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 11967 불켜기 (0) | 2023.07.03 |
---|---|
[python] 백준 5214 환승 (0) | 2023.06.30 |
[python] 백준 20057 마법사 상어와 토네이도 (0) | 2023.06.23 |
[python] 백준 9328 열쇠 (0) | 2023.06.22 |
[python] 백준 1208 부분수열의 합 (0) | 2023.06.22 |
댓글