• 문제 링크
14503번: 로봇 청소기
로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어
www.acmicpc.net
• 풀이 과정
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static int n, m;
static int[][] floor;
static int cnt = 1;
static int[] dy = { -1, 0, 1, 0 };
static int[] dx = { 0, 1, 0, -1 };
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
floor = new int[n][m];
st = new StringTokenizer(br.readLine());
int r = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
int d = Integer.parseInt(st.nextToken());
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < m; j++)
floor[i][j] = Integer.parseInt(st.nextToken());
}
dfs(r, c, d);
bw.write(cnt + "\n");
bw.flush();
}
private static void dfs(int y, int x, int dir) {
floor[y][x] = 2;
for (int i = 0; i < 4; i++) {
dir -= 1;
if (dir == -1)
dir = 3;
int ny = y + dy[dir];
int nx = x + dx[dir];
if (ny >= 0 && nx >= 0 && ny < n && nx < m) {
if (floor[ny][nx] == 0) {
cnt++;
dfs(ny, nx, dir);
return;
}
}
}
int d = (dir + 2) % 4;
int by = y + dy[d];
int bx = x + dx[d];
if (floor[by][bx] != 1 && by >= 0 && bx >= 0 && by < n && bx < m)
dfs(by, bx, dir);
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 3190 뱀 - Implementation / Java (0) | 2022.06.27 |
---|---|
[백준] 14890 경사로 - Implementation / Java (0) | 2022.06.26 |
[백준] 16113 시그널 - Implementation / Java (0) | 2022.06.24 |
[백준] 14499 주사위 굴리기 - Implementation / Java (0) | 2022.06.23 |
[백준] 16506 CPU - Implementation / Java (0) | 2022.06.22 |
댓글