class Solution {
public:
int minPathCost(vector<vector<int>>& grid, vector<vector<int>>& moveCost) {
vector<int> firstFloor = grid[0];
vector<int> lastFloor = grid[grid.size()-1];
vector<int> cnt(grid.size()*grid[0].size(),INT_MAX);
for(int i=0; i<firstFloor.size(); i++){
cnt[firstFloor[i]] = 0;
}
for(int i=0; i<grid.size()-1; i++){
vector<int> floor = grid[i];
vector<int> nextFloor = grid[i+1];
for(int j=0; j<floor.size(); j++){
int node = floor[j];
for(int k=0; k<moveCost[node].size(); k++){
int cost = cnt[node] + moveCost[node][k] + node;
int next = nextFloor[k];
if(cnt[next] > cost){
cnt[next] = cost;
}
}
}
}
int answer = INT_MAX;
for(int i=0; i<lastFloor.size(); i++){
int tmp = cnt[lastFloor[i]] + lastFloor[i];
if(answer > tmp){
answer = tmp;
}
}
return answer;
}
};
푼지 한참 됐는데, 다익스트라 방식을 생각해보다가 접었었다..
이번학기에 듣는 알고리즘 수업에서 아마 다익스트라를 배울 것 같은데, 배우고 나서는 꼭 다익스트라를 사용해서 꼭 풀어보기 메모...