Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 취득후기
- 시뮬레이션
- dp
- 엘라스틱서치
- 재귀함수
- 자바PS
- 네트워크플로우
- 완전탐색
- DFS
- 백준코딩테스트
- 백준
- QUICKSTARTGUIDE
- 구현
- GatherTown
- java
- 게더타운시작
- YBMCOS
- 이젠 골드구현도 어렵네..
- spring
- 01BFS
- BFS
- 다이나믹프로그래밍
- PS
- COSPRO
- 우선순위큐
- 세그먼트트리
- COSPROJAVA1급
- deque
- 다익스트라
- 알고리즘
Archives
- Today
- Total
공부공간
BOJ - 7576 ) 토마토 본문

https://www.acmicpc.net/problem/7576
7576번: 토마토
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토들의 정보가 주어진다. 즉, 둘째 줄부터 N개의 줄에는 상자에 담긴 토마토의 정보가 주어진다. 하나의 줄에는 상자 가로줄에 들어있는 토마토의 상태가 M개의 정수로 주어진다. 정수 1은 익은 토마토, 정수 0은 익지 않은 토마토, 정수 -1은 토마
www.acmicpc.net
익은 토마토가 주변으로 퍼져나가면서 안익은 토마토를 잠식해버리는 문제이다.
기본적은 Bfs형태로, 4방향을 탐색하면서 안익은 토마토가 발견되면 큐에 넣어주었다.
토마토가 들어있지 않음을 체크해주기위해,
큐가 비었을때 ( 모든 탐색이 완료 되었을 때), 0이 존재하는지 체크를 해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#include <iostream>
#include <queue>
using namespace std;
int N, M;
int map[1001][1001];
bool visit[1001][1001];
typedef struct {
int x, y, time;
}coordi;
queue < coordi> Q;
void input() {
cin >> N >> M;
for (int y = 0; y < M; y++) {
for (int x = 0; x < N; x++) {
cin >> map[y][x];
if (map[y][x] == 1) {
Q.push({ x,y,0 });
visit[y][x] = true;
}
}
}
}
int dx[] = { 0,0, -1, +1 };
int dy[] = { 1, -1,0,0 };
int res;
bool check() {
for (int y = 0; y < M; y++) {
for (int x = 0; x < N; x++) {
if (!map[y][x]) return false;
}
}
return true;
}
int main(void) {
input();
while (!Q.empty()) {
int x = Q.front().x;
int y = Q.front().y;
int time = Q.front().time;
Q.pop();
res > time ? res = res : res = time;
for (int index = 0; index < 4; index++) {
int nx = x + dx[index];
int ny = y + dy[index];
if (nx >= 0 && ny >= 0 && nx < N && ny < M) {
if (!visit[ny][nx] && map[ny][nx] != -1) {
visit[ny][nx] = true;
map[ny][nx] = 2;
Q.push({ nx,ny,time + 1 });
}
}
}
}
if (check()) {
cout << res;
}
else {
cout << -1;
}
return 0;
}
|

'알고리즘 > 완전탐색(BFS,DFS)' 카테고리의 다른 글
BOJ - 1002 ) 적록색약 JAVA (0) | 2020.01.20 |
---|---|
BOJ -1697 ) 숨바꼭질 (0) | 2020.01.19 |
BOJ - 5427 ) 불 (0) | 2020.01.17 |
BOJ - 7562 ) 나이트의 이동 (0) | 2020.01.17 |
BOJ -2589 ) 보물섬 (0) | 2020.01.17 |