Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Mar 6, 2025

🧷 문제 링크

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

🧭 풀이 시간

130분

👀 체감 난이도

✏️ 문제 설명

  • 볼록 다각형 A와 B가 각각 반시계 순서대로 주어지며, 다각형 B는 항상 다각형 A의 내부에 존재한다.
  • 어떤 점이 A의 외부에 속하거나 B의 내부에 속하면, 규칙을 위반했다고 한다.
  • 점이 K개 주어지면, 규칙을 위반한 점이 몇 개인지 구해보자.

🔍 풀이 방법

[사용한 알고리즘]

  • 이분 탐색
  • 볼록 다각형 내부의 점 판정

  • 다각형 A의 내부에 속한 점의 개수를 a라 하고, 다각형 B의 내부에 속한 점의 개수를 b라 하면,
    규칙을 위반한 점의 수는 K-a+b이다.
  • 이제, 각각의 점이 볼록 다각형 내부에 속하는지 빠르게 판별만 해주면 된다.

볼록 다각형 내부의 점 판정하기

  • 주어진 볼록 다각형을 lower hullupper hull로 나눈다.
  • 각각의 hull에서, 주어진 점의 x좌표를 기준으로 이분 탐색(lower bound)해서 점을 두 개 골라낸다.
  • 각각의 hull에서 골라낸 두 점과 주어진 점이 모두 반시계 방향을 이룬다면 다각형 내부에 존재하는 것이다.

image

  • 점 S로 예를 들면, 다각형 B에서 upper hull에서의 CCW와 lower hull에서의 CCW가 모두 반시계 방향이다.
    => 다각형 B의 내부에 존재한다.

⏳ 회고

자바엔 lower bound 함수가 없어서 직접 작성했는데,
테스트 한다고 1만 반환하도록 짰다가 고치는 걸 깜빡해서 7트만에 찾았다.

@oncsr oncsr added success 👍 해설을 보지 않고 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때 labels Mar 6, 2025
@ShinHeeEul
Copy link
Contributor

LGTM :)

Copy link
Contributor

@ShinHeeEul ShinHeeEul left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM :)

@ShinHeeEul ShinHeeEul merged commit e3184a0 into main Mar 6, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

success 👍 해설을 보지 않고 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants