long[][] dp 배열을 만들어서 cost를 저장해나가며 최소값을 구하니 잘 되네요.. 동작 원리는 위 코드와 같은데 위 코드는 dp 배열을 사용하지 않고도 충분히 dp와 같은 기능을 수행한다고 생각되는데 왜 결과는 다르게 나올까요??..
1149번 - RGB거리
시간이 좀 많이 지났지만 댓글 올립니다. 오늘 문제를 풀고, bnm6377님의 질문을 보았는데, 아무리 봐도 결과값을 구하는 코딩은 틀린점이 없었습니다. 하지만, 최소값을 구할 때 약간의 오해가 있었던 것으로 보입니다.
소스 33번째줄 if(cost[N-1][k] > cost[N-1][k+1]) 여기를 보시면
cost[N-1][ 0 ] > cost[N-1][ 1 ] 이고 cost[N-1][ 1 ] > cost[N-1][ 2 ] 는 최소값을 보장 못합니다.
단적인 예로
1
1 7 3
을 입력해보면, 최소값은 1이 아닌 3으로 출력이 되는 것을 보실 수 있으실 겁니다.
댓글을 작성하려면 로그인해야 합니다.
bnm6377 5년 전
구현하려고 한 방법은 먼저 색깔별로 cost를 다 저장해두고 최소비용을 누적시켜서 다음 cost를 갱신하도록 하였습니다.
예를 들면,
3
10 20 30
5 90 100
40 20 10
이렇게 입력받은 상태에서
cost[1][0]은 cost[0] 라인에서 자신과 동일한 색깔의 코스트를 제외한 두 개의 코스트 중 작은것의 합으로 갱신됩니다( 이 경우 20이 선택됩니다)
즉, cost[1][0] 은 5 -> 25로 변경됩니다.
같은 방법으로 cost[1][1] 을 구하면 90 -> 100 으로 변경되고, cost[1][2] 는 100 -> 110 으로 변경됩니다.
위 방법을 반복하면 최종적으로 코스트는
10 20 30
25 100 110
140 45 35
가 되고, 누적합이 젤 작은 35를 출력하고 종료하도록 구현했습니다.
이러한 구현방법이 잘못된 것인지 테스트 케이스를 만족해도 틀렸다고 나오네요. 어떻게 하면 좋을지 조언 부탁드립니다.ㅠ