BOJ 14503번 로봇청소기 ( 구현 , DFS ) JAVA
풀이
로봇 청소기가 청소한 곳을 못지나간다는 것으로 착각해서 해결하는데 시간이 좀 많이 들었던 것 같다.
지문을 읽는 것이 역시 젤 어렵다..
앞으로는 문제를 잘 읽어보잣!😀
링크
https://www.acmicpc.net/problem/14503
소스 코드
package boj;
import java.util.Scanner;
public class Boj14503 {
static int n, m;
static int[][] arr;
static int[] dx = {-1,0,1,0};
static int[] dy = {0,1,0,-1};
static boolean[][] visited;
static int res = 1;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int r, c, d;
n = sc.nextInt();
m = sc.nextInt();
r = sc.nextInt();
c = sc.nextInt();
d = sc.nextInt();
arr = new int[n][m];
visited = new boolean[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
arr[i][j] = sc.nextInt();
}
}
visited[r][c] = true;
dfs(r,c,d,arr,visited);
System.out.println(res);
}
public static void dfs(int r,int c,int d,int[][] arr,boolean[][] visited) {
int nextD = d;
int nextR;
int nextC;
for (int i = 1; i <= 4; i++) {
nextD--;
if (nextD < 0) {
nextD = 3;
}
nextR = r + dx[nextD];
nextC = c + dy[nextD];
if (((nextR >= 0) && (nextR < n) && (nextC >= 0) && (nextC < m)) && !visited[nextR][nextC]&&arr[nextR][nextC]!=1) {
visited[nextR][nextC] = true;
res++;
dfs(nextR, nextC, nextD, arr, visited);
return;
}
}
int backD = nextD;
for (int i = 1; i <= 2; i++) {
backD--;
if (backD < 0) {
backD = 3;
}
}
nextR = r + dx[backD];
nextC = c + dy[backD];
if (((nextR >= 0) && (nextR < n) && (nextC >= 0) && (nextC < m)) && arr[nextR][nextC]!=1) {
dfs(nextR, nextC, nextD, arr, visited);
}
}
}
'Algorithm' 카테고리의 다른 글
알고리즘 문제 풀 때 자주하는 for문에서의 실수😅 ( JAVA ) (0) | 2021.04.27 |
---|---|
플로이드 와샬 알고리즘 (0) | 2021.04.22 |
프로그래머스 광고 삽입 KAKAO BLIND 2021 ( 누적 합 ) JAVA (0) | 2021.04.18 |
프로그래머스 KAKAO BLIND 2020 가사 검색 LEVEL4 ( 트라이 ) JAVA (0) | 2021.04.14 |
프로그래머스 KAKAO BLIND2020 괄호 변환 LEVEL2 ( 문자열, 재귀) JAVA (0) | 2021.04.13 |