๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers

[C++/PGS] [PCCP ๋ชจ์˜๊ณ ์‚ฌ #2] 4๋ฒˆ - ๋ณด๋ฌผ์ง€๋„

by xxilliant 2025. 5. 1.
728x90
๋ฐ˜์‘ํ˜•

 

https://school.programmers.co.kr/learn/courses/15009/lessons/121690#

 

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

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

programmers.co.kr


ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค PCCP ๋ชจ์˜๊ณ ์‚ฌ 2ํšŒ - 4๋ฒˆ

์†Œ์š”์‹œ๊ฐ„ 1์‹œ๊ฐ„ ์ด์ƒ...

BFS ํ•˜๋“œ๋ชจ๋“œ(?) ์œ ํ˜•, ์ถ”์ • ๋‚œ์ด๋„๋Š” level 3

 

bfs ๋ฌธ์ œ๋ฅผ ์ด๋ ‡๊ฒŒ๊นŒ์ง€ ๊ผฌ์•„์„œ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋‹ˆ... ์‚ผ์ฐจ์›๋ฐฐ์—ด๊นŒ์ง€ ์“ธ ์ค„์ด์•ผ ..

์ฒ˜์Œ์— ๋ฌด์Šจ ๋Œ€๊ฐ์„  ์ ํ”„๊นŒ์ง€ ๊ณ ๋ ค๋ฅผ ํ•ด์•ผํ•˜๋‚˜????๋ผ๋Š” ์—„์ฒญ ๋ณต์žกํ•œ ๊ณ ๋ฏผ์„ ํ–ˆ์—ˆ๋Š”๋ฐ,

๊ตณ์ด ๊ทธ๋Ÿด ํ•„์š”์—†์ด, ์‹ ๋ฐœ ์‚ฌ์šฉ ์—ฌ๋ถ€๋งŒ ์ฒดํฌํ•ด์„œ

์‹ ๋ฐœ ๋ฏธ์‚ฌ์šฉ ์ƒํƒœ -> dx/dy๋ฅผ 2๋ฐฐ๋กœ ์ ์šฉํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. (๋Œ€๊ฐ์„ ์€ ๊ณ ๋ ค X)

๊ทธ๋ฆฌ๊ณ  visited[][][0]์€ ์‹ ๋ฐœ ๋ฏธ์‚ฌ์šฉ ์ƒํƒœ๋กœ ์ด๋™ํ–ˆ์„ ๊ฒฝ์šฐ, visited[][][1]์€ ์‹ ๋ฐœ์„ ์‚ฌ์šฉํ•ด์„œ ์ด๋™ํ–ˆ์„ ๊ฒฝ์šฐ๋ฅผ ์ €์žฅํ–ˆ์Œ

์–ด๋ ค์› ๋‹ค ๐Ÿซ 

 

์ฐธ๊ณ ์šฉ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค)

 

 

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

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

int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};
int visited[1001][1001][2] = {0}; // 0: ์‹ ๋ฐœ X, 1: ์‹ ๋ฐœ O

bool canGo(int n, int m, int x, int y, int shoes){
    if(x<1 || y<1 || x>n || y>m) return false;
    if(visited[x][y][shoes]>0) return false;
    return true;
}

int solution(int n, int m, vector<vector<int>> hole) {
    int answer = INT_MAX;
    for(auto h:hole){
        visited[h[0]][h[1]][0] = 9; // ํ•จ์ •์„ 9๋กœ ํ‘œ์‹œ
        visited[h[0]][h[1]][1] = 9;
    }
    queue<vector<int>> q; // 0:x, 1:y, 2:count, 3: ์‹ ๋ฐœ ์‚ฌ์šฉ ์—ฌ๋ถ€
    q.push({1,1,0,0});
    visited[1][1][0] = 1;
    visited[1][1][1] = 1;
    while(!q.empty()){
        vector<int> v = q.front();
        q.pop();
        if(v[0]==n && v[1]==m){
            if(answer > v[2]) answer = v[2];
        }
        for(int i=0; i<4; ++i){
            int nx = v[0] + dx[i];
            int ny = v[1] + dy[i];
            if(canGo(n, m, nx, ny, v[3])){
                q.push({nx,ny,v[2]+1,v[3]});
                visited[nx][ny][v[3]] = 1;
            }
        }
        if(v[3]==0){ // ์‹ ๋ฐœ ๋ฏธ์‚ฌ์šฉ ์‹œ
            for(int i=0; i<4; ++i){
                int nx = v[0] + 2*dx[i];
                int ny = v[1] + 2*dy[i];
                if(canGo(n, m, nx, ny, 1)){
                    q.push({nx,ny,v[2]+1,1});
                    visited[nx][ny][1] = 1;
                }
            }
        }
    }
    if(answer == INT_MAX) answer = -1;
    return answer;
}

 

๋ชจ์˜๊ณ ์‚ฌ ๋‹ค ํ’€์–ด๋ดค๋”๋‹ˆ ์ˆ˜๋ฃŒ์ฆ๋„ ์ค€๋‹ค ใ…‹ใ…‹ ๐ŸŽ‰

728x90
๋ฐ˜์‘ํ˜•