문제
https://www.acmicpc.net/problem/16954
걸린 시간
00 : 20 : 33
풀이
C++
#include <bits/stdc++.h>
#define INF 1e9
#define all(c) c.begin(), c.end()
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
char board[8][8];
int dy[9] = {-1, 1, 0, 0, 1, 1, -1, -1, 0};
int dx[9] = {0, 0, -1, 1, -1, 1, -1, 1, 0};
int bfs(){
queue<pair<int, int>> q;
q.push(make_pair(7, 0));
while(!q.empty()){
int size = q.size();
for(int i = 0; i < size; i++){
int y = q.front().first;
int x = q.front().second;
q.pop();
if(board[y][x] == '#') continue;
for(int j = 0; j < 9; j++){
int ny = y+dy[j];
int nx = x+dx[j];
if(0 <= ny && ny < 8 && 0 <= nx && nx < 8 && board[ny][nx] != '#'){
q.push(make_pair(ny, nx));
if(ny == 0 && nx == 7) return 1;
}
}
}
for(int x = 0; x < 8; x++)
board[7][x] == '.';
for(int y = 6; y >= 0; y--){
for(int x = 0; x < 8; x++){
if(board[y][x] == '#'){
board[y][x] = '.';
board[y+1][x] = '#';
}
}
}
}
return 0;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
for(int y = 0; y < 8; y++)
for(int x = 0; x < 8; x++)
cin >> board[y][x];
cout << bfs();
return 0;
}
1초에 한칸씩 욱제가 움직이고 벽을 아래로 이동시켜주는 작업을 bfs 를 통해 구현하면 풀이할 수 있는 쉬운 문제이다.
'Baekjoon' 카테고리의 다른 글
Baekjoon 9613번 GCD 합 (0) | 2020.11.23 |
---|---|
Baekjoon 2931번 가스관 (0) | 2020.11.23 |
Baekjoon 11066번 파일 합치기 (0) | 2020.11.22 |
Baekjoon 1039번 교환 (0) | 2020.11.19 |
Baekjoon 4195번 친구 네트워크 (0) | 2020.11.16 |
댓글