[ 백준 1388 ] 바닥 장식 (JAVA)

2025. 1. 31. 22:39·Algorithm/Baekjoon
반응형

[문제 풀이]

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
'Algorithm/Baekjoon' 카테고리의 다른 글
  • [ 백준 2503 ] 숫자 야구 (C++)
  • [ 백준 1431 ] 시리얼 번호 (C++)
  • [ 백준 12789 ] 도키도키 간식드리미 (C++)
  • [ 백준 17266 ] 어두운 굴다리 (JAVA)
CodeCaptain
CodeCaptain
BackEnd Developer code-0dyssey 님의 블로그 입니다.
  • CodeCaptain
    Code Odyssey
    CodeCaptain
  • 전체
    오늘
    어제
    • All (18)
      • BackEnd (3)
      • FrontEnd (0)
      • DB (0)
      • DevOps (1)
      • Algorithm (12)
        • Baekjoon (12)
      • CS (0)
      • ETC (2)
        • 회고 (1)
        • 책 (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.1
CodeCaptain
[ 백준 1388 ] 바닥 장식 (JAVA)
상단으로

티스토리툴바