백준 15973 - 두 박스

Computer Science/Problem Solving

문제설명

제한사항 및 입출력

이 문제는 서브태스크가 있는 문제이다. 하지만 신경쓰지 말고 한 번에 100점을 받아보자!

풀이

좌표평면 위의 두 직사각형이 어떤 위상으로 교차하는지를 판별하는 문제이다.

별 생각없이 문제를 봤을 땐 전체 좌표평면을 0으로 초기화한 후 직사각형의 범위를 1로 칠하면서 2의 개수(겹쳐진 면적)를 확인하려고 했는데 좌표의 범위가 무려 -1e9 ~ 1e9이다! 절대로 이 방법으로는 풀 수 없다는 것을 직감한 후 다시 생각해보았다.

 

결국 직접 비교하는 구현은 엄청 넓은 사각형이 주어지게 된다면 필연적으로 시간초과가 난다. 주어지는 두 좌표(왼쪽 하단 꼭짓점, 오른쪽 상단 꼭짓점)만 가지고 한 번에 비교할 수 있는 방법이 있을까 고민했다.

x축에서 겹치는 구간 범위와 y축에서 겹치는 구간 범위를 0과 비교한다면 답이 나온다!

 

NULL(겹치지 않음): x축에서 겹치는 구간 범위 < 0 OR y축에서 겹치는 구간 범위 < 0

POINT(한 점만 겹침): x축에서 겹치는 구간 범위 == 0 AND y축에서 겹치는 구간 범위 == 0

LINE(선이 겹침): x축에서 겹치는 구간 범위 == 0 OR y축에서 겹치는 구간 범위 == 0

FACE(부분이 겹침): 그 외의 경우

-> 이 방법은 모든 선분이 x축, y축과 평행한 직사각형이기 때문에 성립한다.

내 코드

x1, y1, x2, y2 = mis()
x3, y3, x4, y4 = mis()

dx = min(x2, x4) - max(x1, x3)
dy = min(y2, y4) - max(y1, y3)

if dx < 0 or dy < 0:
    print("NULL")
elif dx == 0 and dy == 0:
    print("POINT")
elif dx == 0 or dy == 0:
    print("LINE")
else:
    print("FACE")

고찰

문제를 풀고 난 후 만약 도형이 직사각형이 아닌 다른 도형이었다면 어땠을지 생각해보았다. 임의의 네 점을 잇는 두 사각형의 교차판정을 하는 문제라면? (사다리꼴, 평행사변형 등)

 

 

'Computer Science > Problem Solving' 카테고리의 다른 글

백준 23326 - 홍익 투어리스트  (0) 2025.08.19
백준 13265 - 색칠하기  (0) 2025.08.18
백준 19622 - 회의실 배정 3  (0) 2025.08.17
백준 9047 - 6174  (0) 2025.08.17
프로그래머스 - 피로도  (0) 2025.08.17
'Computer Science/Problem Solving' 카테고리의 다른 글
  • 백준 23326 - 홍익 투어리스트
  • 백준 13265 - 색칠하기
  • 백준 19622 - 회의실 배정 3
  • 백준 9047 - 6174
hojoo
hojoo
그냥 개발이 즐거운 사람
  • hojoo
    dev_record
    hojoo
  • 전체
    오늘
    어제
    • 분류 전체보기 (84)
      • Study (0)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (0)
        • Real MySQL 8.0 (0)
        • 친절한 SQL 튜닝 (0)
        • 도메인 주도 개발 시작하기 (0)
        • 대규모 시스템 설계 기초 (0)
      • Computer Science (68)
        • Problem Solving (30)
        • Data Structure (4)
        • Spring Boot (14)
        • DB (1)
        • Java (4)
        • OS (3)
        • Server (3)
        • Tech (0)
      • Security (16)
        • Reversing (15)
        • Assembly (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    서버 증설 횟수
    프로그래머스
    백준
    servlet
    리버싱 핵심원리
    자료구조
    16946
    레나 튜토리얼
    DP
    2539
    DB
    리버싱
    Lena tutorial
    bean
    dreamhack.io
    PE header
    21278
    Reversing
    n^2 배열 자르기
    13265
    소수상근수
    Spring boot
    19622
    n+1
    9421
    12033
    x64dbg
    Header
    15973
    HTTP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
hojoo
백준 15973 - 두 박스
상단으로

티스토리툴바