코딩테스트/백준

백준(BAEKJOON) 22942 데이터 체커 - Python

Moonsu99 2023. 12. 26. 18:49

https://www.acmicpc.net/problem/22942

 

22942번: 데이터 체커

데이터가 조건에 맞는다면 YES, 조건에 만족하지 않는다면 NO를 출력한다.

www.acmicpc.net

 

 

과정

 

중심 좌표는 x축 기준

교점이 존재해서는 안됨 → 원 두개 잇을때 이중원? 아니면 아예 별도로

개수n

중심좌표 x

반지름 r

원 시작좌표 끝좌표

x-r = 시작좌표 x+r 끝좌표

 

 

풀이

import sys
input = sys.stdin.readline
# 원의 개수 입력
N = int(input())

# 각 원의 정보 입력 및 처리
circles_point = []
# 원들이 서로 겹치는지 확인
stack = []
for i in range(N):
    x, r = map(int, input().split())
    circles_point.append((x - r, i, 0))  # 원의 시작점
    circles_point.append((x + r, i, 1))  # 원의 끝점

# x좌표를 기준으로 정렬
circles_point.sort()

for point in circles_point:
    x, close, open = point
    if open == 0:  # 원 시작지점
        stack.append(point)
    else:  # 원 끝지점
        if stack[-1][1] != close:  # 스택의 마지막 원과 번호가 다르면 겹치는 것
            print("NO")
            exit(0)
        stack.pop()  # 스택에서 제거
print("YES")  # 모든 원이 겹치지 않음