원 이동하기 2 문제를 만들고 만든 데이터가 문제의 조건에 맞는지 확인하는 코드를 작성해야한다.
해당 문제의 데이터는 아래 조건들을 만족해야한다.
데이터 형식은 원의 개수 이랑 각 원의 중심 좌표, 원의 반지름 만 주어진다. 따라서, 2번 조건을 만족하는지만 확인하면 된다.
주어진 데이터가 해당 조건을 만족하는지 확인해보자.
첫 번째 줄에는 원의 개수 이 주어진다.
두 번째 줄부터 번째 줄까지 원의 중심 좌표, 원의 반지름 이 공백으로 구분되어 주어진다.
데이터가 조건에 맞는다면 YES, 조건에 만족하지 않는다면 NO를 출력한다.
4
5 4
3 1
6 1
13 3
YES
4
3 1
4 1
5 1
6 5
NO
import sys
input = sys.stdin.readline
class Point:
def __init__(self,p,isOpen,no):
self.p = p
self.isOpen = isOpen
self.no = no
def sol():
n = int(input())
c = []
for i in range(n):
x,r = map(int,input().rstrip().split())
c.append(Point(x-r, True,i))
c.append(Point(x+r,False,i))
c.sort(key=lambda x : x.p)
stack = []
marked = set()
for circle in c:
cc = circle
if cc.p in marked:
print('NO')
return
if cc.isOpen:
stack.append(cc)
marked.add(cc.p)
elif stack[-1].no != cc.no:
print('NO')
return
else:
marked.add(cc.p)
stack.pop()
print('YES')
if __name__=="__main__":
sol()