다희의 코딩 성장일기
[백준] 14503. 로봇 청소기 (자바 JAVA) 본문
[ 문제 ] BOJ 14503. 로봇 청소기
문제 링크 :
https://www.acmicpc.net/problem/14503
[ 풀이 ]
< 접근 방법 및 풀이 >
- 위에 적힌 로봇청소기 동작 방법대로 그대로 구현하면 된다.
< 주의할 점 >
- 맵 탐색할때 항상 범위밖 생각해서 코드 짰는데 굳이 그럴 필요없음. 이건 테두리가 1로 둘러쌓여있기 때문이다.
JAVA 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int dr[] = {-1, 0, 1, 0};
static int dc[] = {0, 1, 0, -1};
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(in.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int map[][] = new int [N][M];
boolean check[][] = new boolean[N][M];
st = new StringTokenizer(in.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(in.readLine());
for (int j = 0; j < M; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
int cnt = 0;
boolean flag = true;
out: while(true) {
if(flag) {
check[R][C] = true;
cnt++;
}
flag = true;
for (int i = 0; i < 4; i++) {
d = (d-1 < 0)? 3 : d-1;
int nr = R + dr[d];
int nc = C + dc[d];
if(check[nr][nc] || map[nr][nc] == 1)
continue;
R = nr;
C = nc;
continue out;
}
int nr = R-dr[d];
int nc = C-dc[d];
if(map[nr][nc] == 1)
break;
R = nr;
C = nc;
flag = false;
}
System.out.println(cnt);
}
}
REVIEW
사실 5달 전에 풀었던 코드인데도 생각보다 시간이 오래걸렸다.
더 빨리 푸는 연습을 해야겠다.
'Algorithm > 백준 BOJ' 카테고리의 다른 글
[백준] 1726. 로봇 (자바 JAVA) (0) | 2021.08.19 |
---|---|
[백준] 4889. 안정적인 문자열(자바 JAVA) (0) | 2021.08.18 |
[백준] 17141. 연구소2 (자바 JAVA) (0) | 2021.08.17 |
[백준] 14719. 빗물 (자바 JAVA) (0) | 2021.08.17 |
[백준] 2504. 괄호의 값 (자바 JAVA) (2) | 2021.08.16 |
Comments