반응형
출처: http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=358&sca=3040
Input
7 8
0010000
0011000
0001100
1011111
1111011
0011100
0011100
0001000
3 5
Output
9
0
입력받을 때, 저글링 표시를 『-1』로 해서 저장합니다.
scanf("%1d", &map[i][j]);로 공백없는 숫자를 한 자리씩 받을 수 있습니다.
또한, BFS 탐색할 때, 저글링이 방사능이 걸려 죽는시간이 3초를 시작시간으로 합니다.
※ Input Data는 열의 크기, 행의 크기 순이므로 주의
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
struct zergling {
int x, y, time;
}que[100 * 100];
int X, Y, sx, sy;
int map[101][101], visited[101][101];
int dr[] = { 0, 0, 1, -1 };
int dc[] = { 1, -1, 0, 0 };
int fr, re;
void input() {
scanf("%d %d", &Y, &X);
for (int i = 1; i <= X; ++i) {
for (int j = 1; j <= Y; ++j) {
scanf("%1d", &map[i][j]);
if (map[i][j] == 1) map[i][j] = -1;
}
}
scanf("%d %d %d %d", &sy, &sx);
}
void push(int x, int y, int elapsedTime) {
// 범위를 벗어나는 경우
if (x < 1 || y < 1 || x > X || y > Y) return;
// 저글링이 없는 경우
if (map[x][y] == 0) return;
// 이미 방문한 경우
if (visited[x][y]) return;
// 방문 표시
visited[x][y] = 1;
// 저글링이 오염되어 죽는시간
map[x][y] = elapsedTime;
que[re++] = { x, y, elapsedTime };
}
void BFS() {
zergling cur;
push(sx, sy, 3);
while (fr < re) {
cur = que[fr++];
for (int i = 0; i < 4; ++i)
push(cur.x + dr[i], cur.y + dc[i], cur.time + 1);
}
}
int main() {
// freopen("input.txt", "r", stdin);
input();
BFS();
int ansTime = 0;
int liveCnt = 0;
for (int i = 1; i <= X; ++i) {
for (int j = 1; j <= Y; ++j) {
if (map[i][j] == -1) liveCnt++;
if (ansTime < map[i][j]) ansTime = map[i][j];
}
}
printf("%d\n", ansTime);
printf("%d\n", liveCnt);
}
반응형
'PS 문제 풀이 > Jungol' 카테고리의 다른 글
[Jungol] 정올 1161 하노이1 (0) | 2021.02.27 |
---|---|
[Jungol] 정올 1336 소수와 함께 하는 여행 (0) | 2021.02.26 |
[Jungol] 정올 1661 미로 탈출 로봇 (0) | 2021.02.26 |
[Jungol] 정올 1006 로봇 (0) | 2021.02.26 |
[Jungol] 정올 2058 고돌이 고소미 (0) | 2021.02.26 |
댓글