ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€(BOJ) 2178๋ฒˆ] ๋ฏธ๋กœ ํƒ์ƒ‰ (C++)
    PS(Problem Solving)/C++ 2022. 1. 23. 23:17
    ๋ฐ˜์‘ํ˜•

    ๋ฌธ์ œ ๋งํฌ

    https://www.acmicpc.net/problem/2178

     

    ๋ฌธ์ œ ์ •๋ณด

    ์ž…๋ ฅ

    ์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ N, M(2 ≤ N, M ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” M๊ฐœ์˜ ์ •์ˆ˜๋กœ ๋ฏธ๋กœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ์ˆ˜๋“ค์€ ๋ถ™์–ด์„œ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

    ์ถœ๋ ฅ

    ์ฒซ์งธ ์ค„์— ์ง€๋‚˜์•ผ ํ•˜๋Š” ์ตœ์†Œ์˜ ์นธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ํ•ญ์ƒ ๋„์ฐฉ์œ„์น˜๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

     

    ํ’€์ด

     ์ด ๋ฌธ์ œ๋Š” BFS์˜ ์‘์šฉ ๋ฌธ์ œ๋กœ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์—์„œ์˜ ๊ฑฐ๋ฆฌ ์ธก์ • ๋ฌธ์ œ๋‹ค!

     

    ์†Œ์Šค ์ฝ”๋“œ

    #include <bits/stdc++.h>
    using namespace std;
    
    #define X first
    #define Y second
    
    string board[102];
    int dist[102][102]; // ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด
    int n, m;
    int dx[4] = { 1, 0, -1, 0 };
    int dy[4] = { 0, 1, 0, -1 }; 
    
    int main(void) {
    	ios::sync_with_stdio(0);
    	cin.tie(0);
    	
    	cin >> n >> m;
    	for (int i = 0; i < n; i++) {
    		cin >> board[i];
    	}
    	
    	for (int i = 0; i < n; i++) {
    		fill(dist[i], dist[i] + m, -1); // ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด์„ ๋ฏธ๋ฆฌ -1๋กœ ์ดˆ๊ธฐํ™”ํ•ด๋‘๋ฉด vis ๋ฐฐ์—ด์„ ๋”ฐ๋กœ ๋‘ฌ์„œ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค!
    	}
    	
    	queue<pair<int, int>> Q;
    	Q.push({0, 0});
    	dist[0][0] = 0; // ์‹œ์ž‘ ์ง€์ ์ด๋ฏ€๋กœ ๊ฑฐ๋ฆฌ 0
    	
    	while (!Q.empty()) {
    		auto cur = Q.front();
    		Q.pop();
    		
    		for (int dir = 0; dir < 4; dir++) {
    			int nx = cur.X + dx[dir];
    			int ny = cur.Y + dy[dir];
    			
    			if (nx < 0 || nx >= n || ny < 0 || ny >= m) {
    				continue;
    			}
    			if (dist[nx][ny] >= 0 || board[nx][ny] != '1') {
    				continue; // ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•œ ๋ฐฐ์—ด์„ -1๋กœ ์ดˆ๊ธฐํ™” ํ•ด๋’€์œผ๋ฏ€๋กœ ๋งŒ์•ฝ -1 ๋ณด๋‹ค ํฐ ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฉด ์ด๋ฏธ ๋ฐฉ๋ฌธํ•ด์„œ ๊ฑฐ๋ฆฌ๋ฅผ ์žฐ ์ƒํƒœ์ž„!
    			}
    			
    			dist[nx][ny] = dist[cur.X][cur.Y] + 1; // ๊ฑฐ๋ฆฌ๋Š” 1์นธ์”ฉ ๋Š˜์–ด๋‚œ๋‹ค.
    			Q.push({nx, ny});
    		}
    	}
    	
    	cout << dist[n - 1][m - 1] + 1; // ๋ฌธ์ œ๋Š” (1, 1)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ 1์นธ์„ ๋”ํ•ด์ค˜์•ผ ํ•œ๋‹ค!
    	
    	return 0;
    }

     

    ๋ฐ˜์‘ํ˜•
Designed by Tistory.