728x90
방향 주의하기
후진할 때는 방향 변경 안하는 거임
package solution;
import java.util.*;
import java.io.*;
// The main method must be in a class named "Main".
class Solution {
static int N, M;
static int[][] room;
static int result = 0;
// 북(0), 동(1), 남(2), 서(3)
static final int[] dx= {-1,0,1,0};
static final int[] dy= {0,1,0,-1};
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
// 방 크기 입력받기
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
room = new int[N][M];
// 처음에 로봇 청소기가 있는 칸
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
// 방 상태 입력받기 > 0인 경우 청소되지 않은 빈 칸, 1인 경우 벽
for(int i=0; i<N;i++) {
st = new StringTokenizer(br.readLine());
for(int j=0; j<M;j++) {
room[i][j] = Integer.parseInt(st.nextToken());
}
}
// 로봇 청소기 작동하기
clean(room, a, b, c);
System.out.println(result);
br.close();
} //main
static void clean(int[][] room, int a, int b, int c) {
int d = c;
int x = a;
int y = b;
int flag = 0; // 이동했을 경우 1
while(true) {
// 1. 현재 칸 청소여부 확인
if(room[x][y] == 0) {
// 현재 칸이 청소 안된 경우 > 현재 칸 청소하기
room[x][y] = 2;
result++;
}
flag = 0;
// 주변 4칸 확인하기
for(int i=0; i<4;i++) {
d = (d + 3) % 4; // 반시계 방향 회전
int nx = x + dx[d];
int ny = y + dy[d];
// 3.주변 4칸 중 청소되지 않은 빈칸이 있는 경우
if(nx >= 0 && ny >=0 && nx <N && ny <M && room[nx][ny] == 0) {
// 이동가능 + 청소 안한 칸인 경우 > 이동
x = nx;
y = ny;
flag = 1;
break;
}
} //for문
// 2. 주변 4칸 중 청소되지 않은 빈 칸이 없는 경우
if(flag == 0) {
// 한 칸 후진하기
int back = (d + 2) % 4;
int bx = x + dx[back];
int by = y + dy[back];
// 벽인 경우 작동멈추기
if(bx < 0 || by < 0 || bx >=N || by >=M || room[bx][by] == 1) {
break;
}
else {
// 후진하기
x = bx;
y = by;
}
}
} //while
}
}
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준 15686] 치킨 배달 (0) | 2025.04.08 |
---|---|
[백준 1167] Java - bfs 여러번 사용 (0) | 2025.03.01 |
[백준 2178] Java - 공백 없는 정수 입력받기 (0) | 2025.02.26 |
[백준 1260] Java - dfs, bfs / 가능한 작은 정점 방문하는 경우 (1) | 2025.02.25 |
[백준 11724] Java - dfs 탐색 (0) | 2025.02.24 |