본문 바로가기
백준

백준 11123번 : 양 한마리... 양 두 마리...

by Huiyeong 2021. 3. 14.

 문제

www.acmicpc.net/problem/11123

 

11123번: 양 한마리... 양 두마리...

얼마전에 나는 불면증에 시달렸지... 천장이 뚫어져라 뜬 눈으로 밤을 지새우곤 했었지.  그러던 어느 날 내 친구 광민이에게 나의 불면증에 대해 말했더니 이렇게 말하더군. "양이라도 세봐!"  

www.acmicpc.net

11123 양 한마리... 양 두마리...

 

 구현 방법

 dfs로 구현하였습니다. 값이 '#'일 때만 탐색하고 탐색할 때마다 방문의 표시로 '.' (빈 칸)으로 바꿔주고 카운트를 세어줍니다.

 

 구현 코드

package BOJ.Silver;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ11123_양한마리양두마리 {
	static int R, C, cnt;
	static int[][] deltas= {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
	static char[][] map;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int TC = Integer.parseInt(br.readLine());
		for (int tc=0;tc<TC;tc++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			R = Integer.parseInt(st.nextToken());
			C = Integer.parseInt(st.nextToken());
			map = new char[R][C];
			for (int r=0;r<R;r++) {
				String input = br.readLine();
				map[r] = input.toCharArray();
			}
			cnt = 0; // cnt 초기화
			// 입력완료
			for (int r=0;r<R;r++) {
				for (int c=0;c<C;c++) {
					if (map[r][c]=='#') {
						cnt++; // 탐색할때마다 카운트 세주기
						dfs(r, c);
					}
				}
			}
			sb.append(cnt+"\n");
		}
		System.out.println(sb);
	}
	
	static void dfs(int r, int c) {
		map[r][c] = '.';
		for (int d=0;d<4;d++) {
			int nr = r+deltas[d][0];
			int nc = c+deltas[d][1];
			if (isIn(nr,nc) && map[nr][nc]=='#') {
				dfs(nr, nc);
			}
		}
		return;
	}
	
	static boolean isIn(int nr, int nc) {
		return nr>=0 && nr<R && nc>=0 && nc<C;
	}
}

 

정답!

 

 

'백준' 카테고리의 다른 글

백준 16236번 : 아기 상어  (0) 2021.03.18
백준 14940번 : 쉬운 최단거리  (0) 2021.03.18
백준 13565번 : 침투  (0) 2021.03.14
백준 3187번 : 양치기 꿍  (0) 2021.03.14
백준 1926번 : 그림  (0) 2021.03.13