반응형
[문제 풀이]
1. 체크하지 않은 나무판자를 시작으로 같은 방향이면 체크를 하고 나무판자의 숫자 +1
[코드]
- 체크하지 않은 나무판자를 선택하고 같은 방향을 체크 후 나무판자의 숫자 +1
for(int n=0; n<N; n++) {
for(int m=0; m<M; m++) {
if(visit[n][m] == 0 && map[n][m] == '-') {
row(n, m);
answer++;
}else if(visit[n][m] == 0 && map[n][m] == '|') {
column(n, m);
answer++;
}
}
}
- 가로 방향의 나무판자를 체크하는 함수
public static void row(int n, int m) {
visit[n][m] = 1;
if(m+1 >= M) return;
if(visit[n][m+1] == 1) return;
if(map[n][m+1] == '-') row(n, m+1);
}
- 세로 방향의 나무판자를 체크하는 함수
public static void column(int n, int m) {
visit[n][m] = 1;
if(n+1 >= N) return;
if(visit[n+1][m] == 1) return;
if(map[n+1][m] == '|') column(n+1, m);
}
[전체 코드]
import java.io.*;
import java.util.*;
public class Main {
static int N, M;
static char[][] map;
static int[][] visit;
static int answer;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
map = new char[N][M];
visit = new int[N][M];
answer = 0;
String s;
for(int n=0; n<N; n++) {
s = br.readLine();
for(int m=0; m<M; m++) {
map[n][m] = s.charAt(m);
visit[n][m] = 0;
}
}
for(int n=0; n<N; n++) {
for(int m=0; m<M; m++) {
if(visit[n][m] == 0 && map[n][m] == '-') {
row(n, m);
answer++;
}else if(visit[n][m] == 0 && map[n][m] == '|') {
column(n, m);
answer++;
}
}
}
System.out.println(answer);
}
public static void row(int n, int m) {
visit[n][m] = 1;
if(m+1 >= M) return;
if(visit[n][m+1] == 1) return;
if(map[n][m+1] == '-') row(n, m+1);
}
public static void column(int n, int m) {
visit[n][m] = 1;
if(n+1 >= N) return;
if(visit[n+1][m] == 1) return;
if(map[n+1][m] == '|') column(n+1, m);
}
}
https://www.acmicpc.net/problem/1388
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[ 백준 2503 ] 숫자 야구 (C++) (0) | 2025.02.15 |
---|---|
[ 백준 1431 ] 시리얼 번호 (C++) (0) | 2025.02.10 |
[ 백준 12789 ] 도키도키 간식드리미 (C++) (0) | 2025.01.26 |
[ 백준 17266 ] 어두운 굴다리 (JAVA) (1) | 2025.01.13 |
[ 백준 1937 ] 욕심쟁이 판다 (C++) (0) | 2024.12.30 |