카테고리 없음

SW Expert Academy 1249. [S/W 문제해결 응용] 4일차 - 보급로[C++]

경우42 2024. 4. 18. 13:18
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15QRX6APsCFAYD

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

 

 

#문제 간단 정리

 

#문제 해결 방법

다익스트라를 사용해서 bfs에 현재 가중치가 적은걸 우선하도록 우선순위 큐를 만들어  bfs 를 사용하도록하자

 

#전체 코드

 

#include <iostream>
#include <stack>
#include <cctype> 
#include <vector>
#include <queue>

using namespace std;

int dx[4] = {1,-1,0,0,};
int dy[4] = {0,0,1,-1};

vector<vector<int>> mapVec;
vector<vector<int>> visited;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int tc; cin >> tc;

    for (int k = 1; k <= tc; k++) {
        int n;
        cin >> n;


        //맵 할당
        mapVec.clear();
        visited.clear();
        mapVec.resize(n, vector<int>(n,0));
        visited.resize(n, vector<int>(n,0));

        for (int i = 0; i < n; i++) {
            string s;
            cin >> s;
            for (int j = 0; j < s.length(); j++) {
                mapVec[i][j] = s[j] - '0';
            }
        }

        priority_queue<pair<int, pair<int, int>>, vector<pair<int, pair<int, int>>>, greater<pair<int, pair<int, int>>>> pq;

        pq.push({ 0,{0,0} });
        visited[0][0] = 1;
        int totalCost = 0;

        while (!pq.empty()) {
            int x = pq.top().second.first;
            int y = pq.top().second.second;
            int cost = pq.top().first;
            if (x == n - 1 && y == n - 1) {
                totalCost = cost;
                break;
            }
            pq.pop();

            for (int i = 0; i < 4; i++) {
                int nx = x + dx[i];
                int ny = y + dy[i];

                if (0 <= nx && nx < n && 0 <= ny && ny < n  && visited[nx][ny] == 0 ) {

                    visited[nx][ny] = 1;
                    pq.push({ cost + mapVec[nx][ny] ,{nx,ny} });

                }
            }


        }

        cout << '#' << k << ' ' << totalCost << '\n';

    }
   
    return 0;
}
반응형