๐Ÿ‘Š PS/Algorithm

[Baekjoon] 2178๋ฒˆ: ๋ฏธ๋กœ ํƒ์ƒ‰

hades1 2024. 7. 10. 17:01

๐Ÿฅ… ๋ฌธ์ œ

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

 

๐Ÿ” ์„ค๊ณ„

๋ฏธ๋กœ๊ฐ€ ์ฃผ์–ด์ง€๊ณ , 1์ธ ์นธ ์ค‘์—์„œ ์ธ์ ‘ํ•œ ์นธ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์—์„œ BFS๋ผ๋Š” ๊ฒƒ์„ ํŒŒ์•…ํ–ˆ๋‹ค.

 

์ง€๋‚˜์•ผํ•˜๋Š” ์ตœ์†Œ ์นธ์„ ๊ตฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ ์นธ๋งˆ๋‹ค ๊ทธ ์นธ์œผ๋กœ ์˜ค๊ธฐ๊นŒ์ง€ ์ด๋™ํ•œ ์ด ์นธ์˜ ์ˆ˜๋ฅผ dp์— ์ €์žฅํ•œ๋‹ค.

 

์–ด๋–ค ์นธ์œผ๋กœ ์ด๋™ํ–ˆ์„ ๋•Œ, ์ด๋™ํ•˜๊ธฐ ์ „ ์นธ์ด ์ €์žฅํ•œ ๊ฐ’+1์ด ์ด๋™ํ•œ ์นธ๊นŒ์ง€ ์ด๋™ํ•œ ์ด ์นธ์˜ ์ˆ˜์ด๋‹ค. ์ด ๊ฐ’๋ณด๋‹ค ์ด๋ฏธ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ฐ’์ด ์ž‘๋‹ค๋ฉด, ์ตœ์†Œ ์นธ์„ ๊ตฌํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ํ์— ๋‹ด์ง€ ์•Š๋Š”๋‹ค.

 

๐Ÿ‘Š ํ’€์ด

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <cmath>
using namespace std;	
int n, m;
int dx[] = {-1,1,0,0};
int dy[] = {0,0,-1,1};
string temp;
vector<vector<int>> miro(100, vector<int>(100));
vector<vector<int>> dp(100, vector<int>(100, 1e9+7));
queue<pair<int, int>> q;

void bfs(){
	dp[0][0] = 1;
	q.push({0, 0});
	while (!q.empty()){
		int cur_x = q.front().first;
		int cur_y = q.front().second;
		q.pop();
		for (int i=0; i<4; i++){
			int new_x = cur_x + dx[i];
			int new_y = cur_y + dy[i];
			if (!(new_x >= 0 && new_x < n && new_y >=0 && new_y < m) || !miro[new_x][new_y]) {
				continue;
			}
			if (dp[new_x][new_y] > dp[cur_x][cur_y] + 1){
				q.push({new_x, new_y});
				dp[new_x][new_y] = dp[cur_x][cur_y] + 1;
			}
		}
	}
}

int main() {
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);
	cin >> n >> m;
	for (int i=0; i<n; i++){
		cin >> temp;
		for (int j=0; j<m; j++){
			miro[i][j] = temp[j] - '0';
		}
	}
	bfs();
	cout << dp[n-1][m-1] << "\n";
	return 0;
}

 

๐Ÿ“ ๋ฉ”๋ชจ

'1'-'0'์œผ๋กœ '1'์„ 1๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.