8-U 다른풀이 질문
189
작성한 질문수 28
안녕하세요 큰돌 선생님 강의 감사합니다..
해당 문제를 처음에 보고 dp로 풀 수 있을것 같아서 접근했는데 원하는 답이 나오지 않아 선생님 강의를 보고 다익스트라로 해결하였습니다.
근데 혹시 이 문제 dp로는 해결할 수 없을까요?
http://boj.kr/b2b9e324cd1644e7a5edb8caf23830aa
처음 dp로 해결하려던 코드입니다. 사실 예제 2번 부터 답이 틀려서 완전 틀린 코드이지만 어디가 틀렸는지 잘 모르겠습니다.
dp의 매개변수로는 y좌표, x좌표, 그리고 d라는 이전에 왔던 방향을 뜻하는 매개변수를 넣었습니다.
현재의 값이 상하좌우 어디에서 온건지에 따라 최적의 값이 달라지기에 d를 추가하였습니다.
dp배열의 초기값은 -1로 초기화했고, 또한 방문여부를 해결하기 위해서 visited배열을 만들어 해결하였습니다.
답변 1
1
안녕하세요 명운님 ㅎㅎ
사실 DP로 최단거리를 푼다...
라고 봤을 때 유사한 방법 중 하나는 플로이드워셜을 들 수 있습니다.
근데 이것또한 메모이제이션을 적용한다기 보다는 완화시킬 수 있는 정점들을 다시 한번 완화를 시켜서 최단거리를 만들거든요...
그러한 완화가 이 코드에는 없기 때문에 틀리지 않았나 싶습니다.
좀 더 자세히 설명하자면요.
플루이드워셜같은 경우 모든 간선들을 다시한번 완화가 될 가능성이 있는지를 보고 더 완화를 합니다.
하지만 이 DP의 코드 경우.
예제2를 예로 들면
3 -> 7 -> 2 -> 0 -> 1 까지의 간선을 만들면 더이상 완화를 하지 않습니다. 그다음에는 그저 메모이제이션이 일어나겠죠.
하지만 정답은
그 다음. 완화를 해야 하는
3 7 2 0 1
2 8 0 9 1
1 2 1 8 13, 2, 1, 2, 1, 0, 2, 0, 1, 1, 1
이후..
0 5
-> 19
이라는 간선인데요.
이게 반례가됩니다.
명운님이 만드신 DP의 점화식은 이것입니다.
dp[i][j][d] = min( i, j 이후의 4방향으로 부터의 거리)
근데 여기서 드는 의문은
dp[i][j] = min(i, j 이후의 4방향으로부터의 거리)
가 맞지 않나라는 생각과
이렇게 했을 때 이후에 만약 다시한번 어떠한 간선을 기반으로 저 정점을 완화시킬 때 정점자체가 이미 메모이제이션이 걸려있어서 완화 가 안 될 것같습니다.
예를 들어
1 -> 2 -> 3 -> 4
-> 5
에서 DP로 하게 되면 3에는 최소거리가 담겨있겠지만
예를 들어
2 -> 6 -> 7 -> 3 이라는 간선이 있고 이게 최적해라면
그 때 3정점까지 드갔을 때 이미 계산된 3이라는 값이 있기 때문에 메모이제이션으로 return ret 이 될것이고 완화가 안 될 것 같습니다.
감사합니다.
0
아하.. 완탐으로 풀 수 있을것 같긴한데 시간초과때문에 메모이제이션만 잘 하면 되지 않을까 하고 dp로 접근했는데 완화를 시키지 못하는 코드이군요.. 답변 정말 감사합니다!
코딩살구클럽 가입부탁드립니다
0
27
2
코딩살구클럽 가입 요청 확인부탁드립니다
0
30
2
5-S 테스트 케이스 질문
0
34
2
코살 문제풀이 환경
0
48
2
2 - T 오큰수 문제가 있는 것 같습니다.
0
43
1
추천 추가문제들
0
43
2
프로그래머스 코테 환경 관련해서 질문드립니다.
0
47
2
해당 문제에 대한 채점이 코딩살구클럽에서 올바르게 처리되지 않습니다.
0
41
2
균형 이진 트리 설명 시 높이 숫자
0
31
2
4-H 질문드립니다.
0
35
2
1-K 질문드립니다.
0
41
2
대기업 인적성 시험 질문
0
41
2
4-C 질문드립니다
0
41
2
[수학숙제 / BOJ 2870] 채점 서버 오작동
0
37
1
코테 준비 질문
0
50
1
살구클럽가입 요청드려요
0
39
2
1-I 문제 질문
0
40
2
코딩살구클럽 가입
0
57
2
AI 코딩 도구 사용 시 학습 방법 조언
0
52
2
코딩살구클럽 오류
0
61
2
코살클 [3-F 괄호 추가하기] 프라이빗 9번 제보
0
46
1
코딩살구클럽 테스트 케이스 오류 제보
0
52
2
삼성 코딩테스트
0
65
2
틀린 이유를 못찾겠습니다
0
48
2





