๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers

[C++/PGS] Lv.2 : ์ง€๊ฒŒ์ฐจ์™€ ํฌ๋ ˆ์ธ

xxilliant 2025. 6. 12. 22:54
728x90
๋ฐ˜์‘ํ˜•

 

https://school.programmers.co.kr/learn/courses/30/lessons/388353#

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก์˜ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr


ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ ˆ๋ฒจ 2

2025 ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋“œ ์ฑŒ๋ฆฐ์ง€ 1์ฐจ ์˜ˆ์„  ๋ฌธ์ œ - ์ •๋‹ต๋ฅ  42%...

๊ฝค ๋ณต์žกํ•œ ๊ตฌํ˜„+๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฌธ์ œ์ด๋‹ค.

 

์ด ๋ฌธ์ œ์˜ ํฌ์ธํŠธ๋Š” bfs ๋ฟ๋งŒ์•„๋‹ˆ๋ผ, ๋บ„ ์ˆ˜ ์žˆ๋Š” ์ง์„ ์–ด๋А ๋ฃจํŠธ๋กœ ์–ด๋–ป๊ฒŒ ํƒ์ƒ‰ํ• ์ง€ ์ฐพ๋Š”๊ฒŒ ์ค‘์š”ํ•จโ€ผ๏ธ

 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ, ๋ช…๋ น์–ด๊ฐ€ "A"์ผ ๋•Œ

๋‚˜๋Š” ์ฒ˜์Œ์— 'A'๋ผ๋Š” ์ง์„ ์ฐพ๊ณ , ์ด ์ง์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋ชจ์„œ๋ฆฌ๊นŒ์ง€ ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ์ƒํ•˜์ขŒ์šฐ๋กœ ํƒ์ƒ‰ํ–ˆ๋Š”๋ฐ

์ด๊ฒŒ ์•„๋‹ˆ๋ผ ๋ชจ์„œ๋ฆฌ์˜ ๋นˆ์นธ์—์„œ bfs๋กœ 'A'๊นŒ์ง€ ๋„๋‹ฌํ•ด์•ผ ํ•ด๊ฒฐ๋˜๋Š” ๋ฌธ์ œ์˜€๋‹ค ใ… ใ… 

Store์—์„œ for๋ฌธ์„ ๋Œ๋ฆฌ๋ฉฐ

๋ชจ์„œ๋ฆฌ์— ์žˆ๋Š” ๋ฌธ์ž๊ฐ€ 'A'์ด๋ฉด -> ์ด ์ขŒํ‘œ๋ฅผ ๋ฐ”๋กœ ์ €์žฅํ•˜๊ณ ,

๋ชจ์„œ๋ฆฌ๊ฐ€ ๋นˆ์นธ์ด๋ฉด -> ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์•ˆ์ชฝ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋ฉฐ 'A'๋ฅผ ์ฐพ๊ธฐ

๊ทธ๋ฆฌ๊ณ  visited ์ฒ˜๋ฆฌ๋„ ์ค‘์š”ํ•˜๋‹ค!!

 

์‚ฝ์งˆํ•˜๋А๋ผ ๊ณ ์ƒํ–ˆ๋Š”๋ฐ ๐Ÿฅน ์ด ๊ธ€์ด ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋„์›€์ด ๋˜๊ธธ..!

์ฐธ๊ณ ๋กœ ์ฝ”๋“œ์—์„œ map์€ ์•ˆ ์จ๋„ ๋œ๋‹ค (์‚ฝ์งˆ์˜ ํ”์ )

 

 

๋‚˜์˜ ํ’€์ด

#include <string>
#include <vector>
#include <iostream>
#include <queue>
#include <unordered_map>
using namespace std;

vector<string> Store;
int n; int m;
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};
int visited[51][51] ={0,};
int visitId = 1;
unordered_map<char, vector<pair<int, int>>> letters;

void deleteBox(string req){
    char r = req[0];
    if(req.length()==2){
        for(auto p: letters[r]){
            Store[p.first][p.second] = ' ';
        }
        letters[r].clear();
        return;
    }
    vector<pair<int, int>> box;
    for(int i=0; i<n; ++i){
        for(int j=0; j<m; ++j){
            // ๋ชจ์„œ๋ฆฌ์—์„œ ์ถœ๋ฐœํ•ด์•ผ ํ•จ
            if(i!=0 && i!=n-1 && j!=0 && j!=m-1) continue;
            if(Store[i][j]==r) {
                box.push_back({i,j});
                continue;
            }
            // ๋นˆ์นธ์ด์–ด์•ผ ํ•จ
            if(Store[i][j]!=' ') continue;
            queue<pair<int,int>> q;
            q.push({i,j});
            visited[i][j] = visitId;
            while(!q.empty()){ // ๋นˆ์นธ์—์„œ bfs๋กœ r์„ ์ฐพ๊ธฐ
                auto [a, b] = q.front();
                q.pop();
                for(int k=0; k<4; ++k){
                    int nx = a+dx[k];
                    int ny = b+dy[k];
                    if(nx<0 || ny<0 || nx>=n || ny>=m) continue;
                    if(visited[nx][ny]==visitId) continue;
                    // ๋‹ค์Œ ์นธ์ด r์ธ ๊ฒฝ์šฐ - box์— ์ €์žฅ
                    if(Store[nx][ny]==r){
                        box.push_back({nx,ny});
                        visited[nx][ny] = visitId;
                    }
                    // ๋‹ค์Œ ์นธ๋„ ๋นˆ์นธ์ด๋ฉด ๊ณ„์† ํƒ์ƒ‰
                    if(Store[nx][ny]==' '){
                        q.push({nx,ny});
                        visited[nx][ny] = visitId;
                    }
                }
            }
        }
    }
    visitId++;
    for(auto b: box) Store[b.first][b.second] = ' ';
}

int solution(vector<string> storage, vector<string> requests) {
    int answer = 0;
    Store = storage;
    n = storage.size();
    m = storage[0].size();
    for(int i=0; i<n; ++i){
        for(int j=0; j<m; ++j){
            char c = Store[i][j];
            letters[c].emplace_back(i, j);
        }
    }
    for(string req: requests){
        deleteBox(req);
    }
    for(int i=0; i<n; ++i){
        for(int j=0; j<m; ++j){
            if(Store[i][j]!=' ') answer ++;
        }
    }
    return answer;
}

728x90
๋ฐ˜์‘ํ˜•