728x90

๋ฌธ์ œ

1์€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ, 0์€ ์ด๋™ํ•  ์ˆ˜ ์—†๋Š” ์นธ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

(1,1)์—์„œ ์ถœ๋ฐœํ•˜์—ฌ (N,M)์˜ ์œ„์น˜๋กœ ์ด๋™ํ•  ๋•Œ ์ง€๋‚˜์•ผ ํ•˜๋Š” ์ตœ์†Œ ์นธ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ 1

4 6
101111
101010
101011
111011

์ถœ๋ ฅ 1

15

์ฝ”๋“œ

#include<iostream>
#include<queue>
#include<algorithm>
#define MAX 101

using namespace std;

int MAP[MAX][MAX];
int visited[MAX][MAX];
int dist[MAX][MAX];
int arrow[4][2] = { {1,0},{-1,0},{0,1},{0,-1} };
int N, M;
pair<int, int> startP, endP;

queue < pair<int, int>> Q;

void BFS() {
    
    Q.push(make_pair(startP.first, startP.second));

    dist[startP.first][startP.second]++;
    visited[startP.first][startP.second] = 1;

    while (!Q.empty()) {
        int y = Q.front().first;
        int x = Q.front().second;
        Q.pop();
        //์ขŒ์šฐ์œ„์•„๋ž˜ ํƒ์ƒ‰
        for (int i = 0; i < 4; i++) {
            int ny = y + arrow[i][0];
            int nx = x + arrow[i][1];


            if ((nx >= 0 &&nx < M) && (ny >= 0 && ny < N)
                && MAP[ny][nx] == 1 &&!visited[ny][nx]) {
                visited[ny][nx] = 1;
                Q.push(make_pair(ny, nx));
                dist[ny][nx] = dist[y][x] + 1;
            }
        }
    }
    cout << dist[endP.first-1][endP.second-1];
}


void input() {
    string num;
    for (int i = 0; i < N; i++) {
        cin >> num;
        for (int j = 0; j < M; j++) {
            MAP[i][j] = num[j]-'0';
        }
    }
}

int main() {

    cin.tie(NULL); cout.tie(NULL); ios::sync_with_stdio(false);

    int tmp;
    cin >> N>>M;
    startP = make_pair(0, 0);
    endP = make_pair(N, M);
    
    input();
    BFS();

    return 0;
}

 

*๊ฐ„๋‹จํ•œ ํ•ด์„ค*

์ € input ํ•จ์ˆ˜์—์„œ cin์„ ํ†ตํ•ด MAP์„ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.

์ฃผ์˜ํ•  ์ ์€ ํ•œ ์ค„๋‹น ๋ถ™์–ด์žˆ๋Š” ์ƒํƒœ๋กœ ๋ฐ›์•„์™€์„œ cin์œผ๋กœ ๋ฐ›์€ ๋‹ค์Œ ๋Š์–ด์„œ ์ €์žฅํ•ด์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

void input() {
    string num;
    for (int i = 0; i < N; i++) {
        cin >> num;
        for (int j = 0; j < M; j++) {
            MAP[i][j] = num[j]-'0';
        }
    }
}

string์œผ๋กœ ๋ฐ›์€ ๋‹ค์Œ string์—์„œ ์ธ์ž๋กœ ์ ‘๊ทผํ•ด์ฃผ๋ฉด char ํ˜•์ด์—ฌ์„œ charํ˜•์„ int๋กœ ๋ฐ”๊พธ๋ ค๋ฉด '0'์˜ ์ˆซ์ž๋ฅผ ๋นผ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋‹ค์Œ BFS ํƒ์ƒ‰์„ ํ†ตํ•ด ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„์ฃผ๋ฉด ๋˜๋Š”๋ฐ BOJ 6087๋ฒˆ ๋ ˆ์ด์ € ํ†ต์‹ ๊ณผ ๋ฌธ์ œ๊ฐ€ ๋งค์šฐ ํก์‚ฌํ•ฉ๋‹ˆ๋‹ค.

https://dana3711.tistory.com/90

 

[C++] BOJ 6087๋ฒˆ: ๋ ˆ์ด์ € ํ†ต์‹ 

๋ฌธ์ œ ๊ฑฐ์šธ์„ ์„ค์น˜ํ•˜๋ฉด ๋ฐฉํ–ฅ์„ 90๋„ ํšŒ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. *์€ ๋ฒฝ์œผ๋กœ ๋šซ๊ณ  ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์—†๋‹ค. ๊ฑฐ์šธ์„ ์ตœ์†Œ๋กœ ์„ค์น˜ํ•˜์—ฌ์„œ ์ฒ˜์Œ ์‹œ์ž‘์ง€์  C์—์„œ ๋์ง€์  C์— ๋„๋‹ฌํ• ๋•Œ๊นŒ์ง€ ๊ฐ€์•ผํ•œ๋‹ค. ์ตœ์†Œ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ

dana3711.tistory.com

๋‹ค๋งŒ ๋‹ค๋ฅธ์ ์€ ๋ชฉํ‘œ ์ง€์ ๊นŒ์ง€ ๊ฐ€๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ๋น„์šฉ์„ ์ถœ๋ ฅํ•ด์•ผํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ

if ((nx >= 0 &&nx < M) && (ny >= 0 && ny < N)&& MAP[ny][nx] == 1 &&!visited[ny][nx]) 
{
    visited[ny][nx] = 1;
    Q.push(make_pair(ny, nx));
    dist[ny][nx] = dist[y][x] + 1;
}

4๋ฐฉํ–ฅ ํƒ์ƒ‰์„ ํ• ๋•Œ ๋งŒ์•ฝ ๋งต ์•ˆ์— ์žˆ๊ณ ((nx >= 0 &&nx < M) && (ny >= 0 && ny < N)), ๊ทธ ์นธ์ด ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์ด๋ผ๋ฉด(MAP[ny][nx] == 1) ํ•ด๋‹น ์นธ์„ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์„ ๋•Œ

ํ•ด๋‹น ์นธ์œผ๋กœ ์ž๋ฆฌ๋ฅผ ์ด๋™ํ•˜๊ณ  ๊ฐ€๋Š” ๋น„์šฉ์„ +1 ํ•ด์ค๋‹ˆ๋‹ค.

 

 

 

 

*์ด ๋ฐฉ๋ฒ•๋งŒ์ด ๋งž๋Š” ์ •๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํ›จ์”ฌ ์ข‹๊ณ  ๋น ๋ฅธ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๋ถ„๋“ค ํ™”์ดํŒ…! '0'/*

 

๋ฐ˜์‘ํ˜•

+ Recent posts