Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
문제
#197 호텔
해결 과정
다른분들의 풀이를 보니 내가 너무 복잡하게 푼 것 같다.
메모리, 시간
백준 문제일 경우 아래에 입력해주세요
#문제
숨바꼭질 3
나의 풀이 과정
DP로 접근
최소한의 시간을 구하는 문제여서, DP로 풀었었다.
0부터 K*2까지 순서대로 지나가며 최소 시간을 구하는 로직을 짰었는데, 이때 수빈이의 현재 위치를 X라고 두고 X가 N보다 작을 때와 클때를 나눠 최소 시간을 구했다. (N에서 수빈이가 뒤로가는 경우도 있기 때문)
1) X < N일 때
N-1부터 0까지 수빈이가 위치할 때 N에서 걸리는 시간을 구했다.
2) X > N일 때
N+1부터 K*2까지 수빈이가 지나가면서 최소 시간을 구한다.
수빈이의 현재 위치가 X일때 아래 두가지 시간 중 최소 시간을 저장한다.
1️⃣ [X-1 위치의 최소 시간] + 1 ⇒ 이전 칸에서 한칸 걸은 경우
2️⃣ [X/2 위치의 최소 시간] ⇒ x/2 위치에서 순간이동을 할 경우
코드에서는 수빈이의 현재 위치를 ind라고 표현했다.
실패
결국 저 코드는 틀렸다. 코드를 보면 틈틈이 틀린 부분이 있는데, 애초에 X < N일 때 [X *2위치의 최소시간]을 고려할 필요가 없다. N에서 뒤로 가는 과정이기 때문에 2배 앞으로 가는 방법은 있어도, 2배로 뒤로가는 과정은 없기 때문이다. 이뿐만 아니라 DP로 하게 되면 고려해야하는 경우가 너무 많다. 그래서 DP말고 다익스트라 알고리즘으로 풀었다.
다익스트라 알고리즘
다익스트라 알고리즘은 한 루트노드에서 비용이 적은 노드 순서대로 탐색하는 알고리즘이다. 다익스트라 최단 경로 알고리즘은 기본적으로 그리디 알고리즘으로 분류되는데 , ‘가장 비용이 적은 노드’를 선택해서 임의의 과정을 반복하기 때문이다.
예시로 N = 4, K = 6일 때 아래와 같이 그래프가 그려진다.
한 노드당 고려해야하는 경우가 3가지 있다.
1️⃣ 2*X로 순간이동할 때
2️⃣ X-1 한칸 이동할 때
3️⃣ X+1 한칸 이동할 때
루트 노드에서 위의 3가지 경우를 고려하면 3,5,8노드가 나오고 각각의 간선에 비용이 생긴다. 그 중 가장 비용이 적은 순간이동을 먼저 탐색해야한다. 그럼 4 → 3 → 6 순서로 6을 탐색할 수 있게 된다.
성공 🎉