Skip to content

Conversation

@03do-new30
Copy link
Contributor

🧷 문제 링크

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

🧭 풀이 시간

60분

👀 체감 난이도

✏️ 문제 설명

  • 세준이는 높이 차이가 T보다 크지 않은 곳으로만 다닐 수 있다.
  • 현재 높이 >= 다음 높이 일 때 이동에 걸리는 시간: 1초
  • 현재 높이 < 다음 높이일 때 이동에 걸리는 시간: 높이 차이의 제곱
  • 세준이가 D보다 크지 않은 시간 동안 올라갈 수 있는 최대 높이를 구한다. (세준이는 호텔에서 출발해서 호텔로 돌아와야 한다.)

🔍 풀이 방법

  • 주어진 입력을 인접 리스트 형태의 그래프로 변환
    • (i, j) 좌표를 (i * M + j)번 노드라고 생각하면 된다.
    • 상, 하, 좌, 우로 인접하면서 높이 차이가 T보다 크지 않은 노드들로 이동 가능하다.
  • 시작점에서 disjktra로 최단경로를 구한 뒤, 각 정점에서 시작점으로 제한 시간 내에 돌아올 수 있는지 한 번 더 체크한다.
  • 이때, 시작점 -> 정점 x -> 시작점 으로 D시간 내에 이동이 가능한 경우 중 정점x의 높이가 가장 높은 것을 구한다.

⏳ 회고

  • 시작점의 높이도 고려해줘야함을 잊으면 안된다.
  • highest를 시작점의 높이로 초기화하고 진행하면 편하다.
  • 예시
    3 3 51 1000
    zAA
    AAA
    AAA
    

@ShinHeeEul ShinHeeEul merged commit 0d8b379 into main Feb 4, 2025
1 check passed
Comment on lines +94 to +111
Copy link
Contributor

Choose a reason for hiding this comment

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

다익스트라를 $NM$번 돌려서 시작점으로 되돌아오게 하는 이 방법이 훨씬 더 직관적이네요,, 배워갑니다 👍

@03do-new30 03do-new30 added the success 👍 해설을 보지 않고 풀었을 때 label Feb 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

success 👍 해설을 보지 않고 풀었을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants