Problem : 미로만들기
유형 : 다익스트라
문제 해석
- 시작 방에서 끝방 까지 갈때, 최소로 바꾸는 검은 방의 개수를 구하라.
문제 재해석
- 시작방과 끝방은 항상 흰색이다.
- 숫자가 아닌 문자열로 입력이 들어온다.
- 거리를 재는 것이 아닌, 바꾸는 방의 개수를 구한다.
해결 전략
다익스트라
를 이용하여 문제를 해결한다.- 바꾼 검은 방의 개수를 기준으로
min heap
으로 운영한다.
설계, 구현
- 3개의 원소를 관리하여야 하니 구조체를 이용한다.
- 구조체를 heap에 담으며 관리하니, 오버로딩을 통해 구조체를 만들어둔다.
- 검은 방을 만난 경우, 일단 색을 바꿔버리고 들어간다.
- 흰 방 만을 이용했을 때 목적지에 도달하지 못한다면, 검은방을 흰색으로 바꾼 경우를 이어서 진행하게 된다.
주의 할 점
- 우선순위 큐는 기본적으로
max heap
이다. - 오버로딩시에 역순으로 정렬할 수 있게 해야한다.
코드
1 |
|
피드백
visit
변수가 이미 사용되고 있는 저지들이 있다. (구름, leetcode) 앞으로는visited
로 하자.- 다른분들 풀이를 보니 deque를 이용해
BFS
로 푸신분들도 있었다. visited
를 3차원으로 관리해야 하나 잠시 고민했었다. 애매할땐 시뮬레이션을 통해 설계를 검증하자.