문제 : https://www.acmicpc.net/problem/14503
14503번: 로봇 청소기
로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 각 칸은 (r, c)로 나타낼 수 있고, r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로 부터 떨어진 칸의 개수이다. 로봇 청소기는 다음
www.acmicpc.net
문제 요약 : 로봇이 청소하는 칸 수 출력
| 입력 | 출력 |
|
3 ≤ N,M(크기) ≤ 50 1 ≤ R < N 1 ≤ C <M d = 0(북), 1(동), 2(남), 3(서) [N][M] = 0(빈 칸), 1(벽) |
로봇이 청소하는 칸 수 출력 |
JAVA
| 채점 번호 | 아이디 | 문제 번호 | 결과 | 메모리 | 시간 | 언어 | 코드 길이 |
| 16356986 | cbkpar | 14503 | 맞았습니다!! | 13292KB | 76ms | Java | 1367B |
import java.io.*;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] dx = {0,1,0,-1}; // 북동남서
int[] dy = {-1,0,1,0};
int n,m,y,x,d,i,j;
String str = "";
str = br.readLine();
String[] arr = str.split(" ");
n = Integer.parseInt(arr[0]);
m = Integer.parseInt(arr[1]);
str = br.readLine();
arr = str.split(" ");
y = Integer.parseInt(arr[0]);
x = Integer.parseInt(arr[1]);
d = Integer.parseInt(arr[2]);
int[][] map = new int[n][m];
for(i=0;i<n;i++) {
str = br.readLine();
arr = str.split(" ");
for(j=0;j<m;j++) {
map[i][j] = Integer.parseInt(arr[j]);
}
}
int clean = 0;
while(true) {
if(map[y][x]==0) { //청소가능 여부
map[y][x]=2;
clean++;
}
//왼쪽으로 돌아가면서 청소가 가능한지 확인
if(map[y+dy[(d+3)%4]][x+dx[(d+3)%4]]==0) {
d=(d+3)%4;
y+=dy[d];
x+=dx[d];
continue;
}
if(map[y+dy[(d+2)%4]][x+dx[(d+2)%4]]==0) {
d=(d+2)%4;
y+=dy[d];
x+=dx[d];
continue;
}
if(map[y+dy[(d+1)%4]][x+dx[(d+1)%4]]==0) {
d=(d+1)%4;
y+=dy[d];
x+=dx[d];
continue;
}
if(map[y+dy[d]][x+dx[d]]==0) {
y+=dy[d];
x+=dx[d];
continue;
}
//4방향 청소가 불가능 하다면
if(map[y+dy[(d+2)%4]][x+dx[(d+2)%4]]==1) {
break; //뒤에 벽이 있으면 종료
}else {
//벽이 없을경우 후진
y+=dy[(d+2)%4];
x+=dx[(d+2)%4];
continue;
}
}
System.out.println(clean);
}
}
'백준온라인' 카테고리의 다른 글
| [백준온라인] 14891번 톱니바퀴 (0) | 2019.12.06 |
|---|---|
| [백준온라인] 14890번 경사로 (0) | 2019.12.05 |
| [백준온라인] 14502번 연구소 (0) | 2019.12.04 |
| [백준온라인] 14501번 퇴사 (0) | 2019.12.04 |
| [백준온라인] 14500번 테트로미노 (0) | 2019.12.04 |