해결된 질문
작성
·
187
1
저는 맵2차원배열을 boolean으로 사용하고싶어
아래와 같이 코드를 작성해봤습니당... 예제입력1. 은 답이 잘나오는데 나머지는 왜 틀리게 나올까용...
package DFS;
import java.io.*;
import java.util.StringTokenizer;
import java.util.Vector;
/*
바닥 장식
https://www.acmicpc.net/problem/1388
*/
public class B1388 {
final static int MAX =50+10;
static boolean [][] map;
static boolean [][] visited;
static int M,N;
static void dfs(int y, int x){
visited[y][x]=true;
if (map[y][x]==true&& map[y][x+1]==true){
dfs(y, x + 1);
}
if(map[y][x]==false&&map[y+1][x]==false){
dfs(y+1,x );
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
map = new boolean[MAX][MAX];
visited = new boolean[MAX][MAX];
//맵정보 반영
for (int i = 1; i <= N; i++) {
String str = br.readLine();
for (int j = 1; j <= M; j++) {
map[i][j] = (str.charAt(j - 1) == '-' ? true : false);
}
}
//dfs
int answer=0;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
if(map[i][j]&&visited[i][j]==false){
dfs(i,j);
answer++;
}
}
}
bw.write(String.valueOf(answer));
bw.flush();
bw.close();
}
}
답변 1
1
락곤님 안녕하세요 :)
main 함수 내에서 dfs를 호출하는 조건에 map[i][j]가 포함돼서 그런 것으로 보이네요!
작성하신 코그에서 map의 true/false는 가로/세로를 의미하기 때문에 true일때만 호출되고 false일때는 호출하지 않으면 제대로 정답이 안나올 것으로 보여요.
1번 예시는 가로 줄 4개만 있기 때문에 정답으로 나올 것 같고요!
답변 빠른답변 정말 감사합니다 !!!