Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Feb 11, 2025

🧷 문제 링크

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

🧭 풀이 시간

53분

👀 체감 난이도

✏️ 문제 설명

[문제 상황]

  • 나는 2차원 평면에 살고 있고, 초기 체력이 $X$이다.
  • 나는 아무 방향으로나 $d$만큼 이동할 때 체력이 $d$ 소모되고 $0$ 미만으로 떨어지면 사망한다.
  • 부스터를 사용하면, 상하좌우 중 원하는 방향으로 원하는 만큼 이동할 수 있고, 체력을 소모하지 않는다.
  • 부스터는 충전된 상태에서만 사용할 수 있고, 한 번 사용하면 방전되며 초기에 부스터는 방전 상태이다.
  • 평면에는 체크포인트가 $N$곳 있어서, 이 곳으로 가게 되면 체력이 다시 $X$가 되고, 부스터는 충전 상태로 변한다.
    [문제 요구사항]
  • $A, B, X$가 주어지면, 최대 체력이 $X$일 때, $A$번 체크포인트에서 시작해서 $B$번 체크포인트까지 이동 가능한지 구해보자.
  • 한 번 구하면 재미없으니까 $Q$번 구해야 한다.

🔍 풀이 방법

  • 어떤 체크포인트 $A$$B$를 왕복하는 데 필요한 최소 체력은 x축 변화량, y축 변화량 중 더 작은 값이 된다.
  • 각 축 별로 정렬시키면, $N$개의 점들을 서로 왕복하는 그래프를 모델링할 때 간선을 $O(2N)$으로 줄일 수 있다.
  • 이렇게 그래프를 만들고 나면, 각 질문은 $A$에서 $B$까지 가중치 $X$이하인 간선만으로 이동 가능한가?를 판별하는 문제가 된다.
  • 오프라인 쿼리로 $X$가 작은 질문부터 처리하도록 하고, 간선을 이을 때 분리 집합을 이용하면 $A$$B$가 같은 집합에 속할 때 이동가능한 것으로 생각할 수 있다.

⏳ 회고

처음에는 이분 탐색인가 고민하다가 풀이가 떠오르지 않아서 넘어갔다.

같은 x 혹은 y값을 가지는 점들끼리 분리 집합으로 묶어볼까도 했는데, 풀이가 명확히 정립이 안 되고 잘 모르겠어서 또 넘어갔다.

30분동안 고민하다가 도저히 모르겠어서 알고리즘 분류를 까고 풀었다..

간선을 줄여서 그래프 모델링하는 방법이 아래 문제랑 매우 유사하고, 알아두면 좋을 것 같다.
https://www.acmicpc.net/problem/2887

@oncsr oncsr added the hint 💡 반례를 참고했거나 힌트를 얻고 풀었을 때 label Feb 11, 2025
@ShinHeeEul ShinHeeEul merged commit 09c1243 into main Feb 11, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

hint 💡 반례를 참고했거나 힌트를 얻고 풀었을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants