BOJ
[JAVA]백준 16724번 - 피리 부는 사나이
yujinkimkim
2023. 9. 1. 19:31
16724번: 피리 부는 사나이 (acmicpc.net)
16724번: 피리 부는 사나이
첫 번째 줄에 지도의 행의 수를 나타내는 N(1 ≤ N ≤ 1,000)과 지도의 열의 수를 나타내는 M(1 ≤ M ≤ 1,000)이 주어진다. 두 번째 줄부터 N개의 줄에 지도의 정보를 나타내는 길이가 M인 문자열이 주
www.acmicpc.net
package baekjoon;
import java.util.*;
import java.io.*;
public class b16724 {
static boolean visited[][];
static boolean finished[][];
static int ans = 0;
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()), m = Integer.parseInt(st.nextToken());
int[][] arr = new int[n][m];
visited = new boolean[n][m];
finished = new boolean[n][m];
ans = 0;
for(int i = 0 ; i < n; i++) {
String tmp = br.readLine();
for(int j = 0 ; j < m ; j++) {
if(tmp.charAt(j)=='U')
arr[i][j] = 0;
else if(tmp.charAt(j)=='D')
arr[i][j] = 1;
else if(tmp.charAt(j)=='L')
arr[i][j] =2;
else
arr[i][j] = 3;
}
}
for(int i = 0 ; i < n ; i++) {
for(int j = 0 ; j < m ;j++) {
if(!visited[i][j])
dfs(i,j, arr);
}
}
bw.write(ans+"");
bw.close();
}
public static void dfs(int row, int col, int[][] arr) {
int dirY[] = {-1,1,0,0};
int dirX[] = {0,0,-1,1};
visited[row][col] = true;
int nx = col + dirX[arr[row][col]];
int ny = row + dirY[arr[row][col]];
if(!visited[ny][nx])
dfs(ny, nx, arr);
else {
if(!finished[ny][nx])
ans++;
}
finished[row][col] = true;
}
}
[알고리즘] Java / 백준 / 피리 부는 사나이 / 16724 (velog.io)
이 선생님 코드 참고했습니당