알고리즘 자체가 최소값을 구할 수 없다고 생각됩니다.
문제의 해답인 최소비용을 구하기 위해서는 최소 비용 뿐만 아니라, 그걸 선택함에 따른 감가상각도 고려를 해야합니다.
(이때문에 저도 다른 알고리즘을 짜봤지만 답이 틀리더군요...)
간단한 예제를 들어드리겠습니다.
1 2 3
4 100 200
5 6 7
위의 경우, 눈으로 대충 봐도 답이 2, 4, 6순으로 선택해서 12임을 알수 있습니다.
하지만 님의 알고리즘 대로라면
1선택
0 0 0
0 100 200
5 6 7
5선택
0 0 0
0 100 200
0 0 0
100선택
0 0 0
0 0 0
0 0 0
답 : 106이 나오게 됩니다.
mojunseo49 6년 전
제출하여보았지만 틀렸다고 나와서 질문드립니다.
제가 머리가 나빠서 획기적인 알고리즘은 구현하지못하였고..
제 방법은 이렇습니다.
전제는 첫번째 입력된 집의 비용이 아닌, 전체에서 가장 적은 비용이 드는 집부터 골라 색칠합니다.
testcase를 예로 들면 26이 아닌, 13부터 찾게 됩니다.(문제 이해를 잘못한건가요?)
일단 배열에 입력된 비용들을 저장합니다.
첫번째로 전체에서 가장 적은 비용인 13을 찾아 내었고, 그 집은 13이 해당된 RED로 색칠하였기 때문에
더이상 행 정보는 필요하지 않습니다. 또, 이웃집은 RED로 칠할 수 없기 때문에 13이 저장된 열의 위 아래도 필요하지 않습니다.
따라서 배열의 해당위치는 0으로 바꿉니다.
두번째로 13 다음으로 작은 비용을 찾아내고, 위와 같은 방법으로 0으로 바꿉니다.
모든 집을 채우게되면 최소값을 리턴합니다.
아래는 Test case 결과입니다.
26 40 83
0 60 57
0 0 0
------------------------
0 0 0
0 60 57
0 0 0
-------------------
0 0 0
0 0 0
0 0 0
-------------------
96