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

 

15972번: 물탱크

세로 길이가 N, 가로 길이가 M, 높이가 H인 물탱크가 있다. N, M, H는 모두 양의 정수이다. <그림 1>은 세로 길이가 2, 가로 길이가 3, 높이가 5인 물탱크 모양을 보여준다. <그림 1>에서 보듯이 물탱크

www.acmicpc.net

 

2018년 당시 서브태스크만 긁었던 문제. 당시에 생각한 아이디어 자체는 맞았기에 쉽게 AC를 받을 수 있었다. 

 

어느 한 칸의 물의 높이가 정해졌다고 생각하면, 그 칸보다 높은 인접한 칸을 따져 줄 때 크게 세 가지 경우가 있을 것이다. 두 칸 사이에 인접한 칸의 현재 상태보다 낮은 구멍이 없거나, 구멍이 두 칸의 높이 사이에 있거나, 구멍이 주어진 칸의 높이보다 낮은 경우이다. 첫번째 경우는 업데이트를 하지 않으면 되고, 두 번째 칸의 경우는 구멍의 높이로 업데이트 해주고, 세번째 경우는 주어진 높이로 업데이트하면 된다. 

 

높이가 낮은 순서대로 우선순위 큐에 넣어 따져 줄 칸을 정할 수 있고, 다익스트라랑 비슷한 아이디어이므로 이렇게 관리하면 된다는 증명도 비슷하게 할 수 있다. 

 

거리 대신 물의 높이를 기준으로 다익스트라를 구현하고, dis[i]+d[i][j]를 쓰는 대신 max(h[i], d[i][j])로 업데이트를 해 주면 쉽게 AC를 받을 수 있다. 

'알고리즘 > 백준' 카테고리의 다른 글

백준 3090 차이를 최소로  (0) 2023.01.05
백준 7469 K번째 수  (0) 2023.01.05
백준 22348 헬기 착륙장  (0) 2023.01.05
백준 1315 RPG  (0) 2023.01.05
백준 1178 간선 추가  (1) 2023.01.05

+ Recent posts