danbibibi
article thumbnail
Published 2023. 3. 18. 23:47
BOJ 1584번: 게임 문제 풀이/백준

1. 문제

문제 바로가기> BOJ 1584번: 게임

 

1584번: 게임

첫째 줄에 위험한 구역의 수 N이 주어진다. 다음 줄부터 N개의 줄에는 X1 Y1 X2 Y2와 같은 형식으로 위험한 구역의 정보가 주어진다. (X1, Y1)은 위험한 구역의 한 모서리이고, (X2, Y2)는 위험한 구역의

www.acmicpc.net

 

2. 풀이

BFS 탐색을 진행하되,

안전한 구역인 경우, 그 구역에서 먼저 탐색을 진행해주기 위해 deque 자료구조를 이용했다!!

<cpp />
#include <iostream> #include <queue> #define MAX 501 #define DANGER 1 #define DEATH 2 using namespace std; struct DATA { int y, x, lose; }; int N, M; int map[MAX][MAX]; bool visited[MAX][MAX]; int dy[] = {-1, 1, 0, 0}; int dx[] = {0, 0, -1, 1}; void swap(int &a, int &b) { if (b < a) { int tmp = b; b = a; a = tmp; } } void check_zone(int y1, int x1, int y2, int x2, int zone) { swap(y1, y2); // y1이 y2 보다 작음을 보장 swap(x1, x2); // x1이 x2 보다 작음을 보장 for (int y = y1; y <= y2; y++) { for (int x = x1; x <= x2; x++) map[y][x] = zone; } } void input() { int y1, x1, y2, x2; cin >> N; while (N--) { cin >> x1 >> y1 >> x2 >> y2; check_zone(y1, x1, y2, x2, DANGER); // 위험 구역 } cin >> M; while (M--) { cin >> x1 >> y1 >> x2 >> y2; check_zone(y1, x1, y2, x2, DEATH); // 죽음 구역 } } int solution() { deque<DATA> dq; visited[0][0] = true; dq.push_back({0, 0, 0}); while (!dq.empty()) { int y = dq.front().y; int x = dq.front().x; int lose = dq.front().lose; dq.pop_front(); if (y == MAX - 1 && x == MAX - 1) return lose; for (int d = 0; d < 4; d++) { int ny = y + dy[d]; int nx = x + dx[d]; if (ny < 0 || ny >= MAX || nx < 0 || nx >= MAX) // 범위를 벗어나는 경우 continue; if (visited[ny][nx] || map[ny][nx] == DEATH) // 이미 방문한 경우, 죽음의 구역인 경우 continue; visited[ny][nx] = true; if (map[ny][nx] == DANGER) // 위험한 구역인 경우 dq.push_back({ny, nx, lose + 1}); // 뒤에 넣어줌!! else dq.push_front({ny, nx, lose}); // 앞에 넣어줌!! } } return -1; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); input(); cout << solution(); // 잃는 생명의 최솟값 }

'문제 풀이 > 백준' 카테고리의 다른 글

BOJ 12852번: 1로 만들기 2  (0) 2023.03.21
BOJ 2623번: 음악프로그램  (0) 2023.03.21
BOJ 2636번: 치즈  (0) 2023.03.18
BOJ 2842번 : 집배원 한상덕  (0) 2023.03.10
BOJ 1918번: 후위 표기식  (0) 2023.03.07
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로