9_yoon
개발저장소
9_yoon
전체 방문자
오늘
어제
  • 분류 전체보기 (101)
    • 알고리즘 (52)
      • BJ (40)
      • 프로그래머스 (0)
      • SWEA (10)
      • JO (2)
    • 이론 공부 (7)
      • 네트워크 (2)
      • 알고리즘 (2)
      • Java (1)
      • Web (1)
      • 기타 (1)
    • 개발 공부 (35)
      • Project (1)
      • JavaScript (1)
      • Typescript (1)
      • Spring (12)
      • Java (2)
      • Next JS (7)
      • React (3)
      • Vue (1)
      • Web (5)
      • 기타 (2)
    • 기타 (7)
      • SSAFY (7)
      • 일상 (0)

인기 글

태그

  • SSAFY
  • NextJS
  • 스프링
  • 노마드코더
  • SWEA
  • React
  • 김영한 스프링
  • 백준
  • 싸피7기
  • 싸피

최근 글

티스토리

hELLO · Designed By 정상우.
9_yoon

개발저장소

[BJ] 백준 1012 유기농 배추 (JAVA)
알고리즘/BJ

[BJ] 백준 1012 유기농 배추 (JAVA)

2022. 3. 30. 23:21
728x90
반응형

문제

https://www.acmicpc.net/problem/1012

 

풀이 방법​

실버 레벨에 해당하는 문제로 배추의 위치가 주어지고, 인접해있는 배추를 탐색해서 몇개의 배추 구역이 있는지 개수를 구하면 되는 문제다. 
4방탐색으로 모든 방향을 돌면서 배추가 존재하는지, 방문했는지의 여부를 판단해야하기 때문에 BFS알고리즘을 사용해서 구현했다.
우선 배추의 위치는 입력값을 토대로 1로 설정해줬다.
그리고 이제 땅을 모두 돌면서 배추가 존재하면서 아직 방문하지 않은 경우 새로운 구역을 발견한 것이기 때문에 구역의 수에 1를 추가해줬다.
인접해있는 배추들을 모두 찾아줘야하기 때문에 Queue를 사용해서 BFS를 구현해줬다.
4방탐색을 하면서 배추이면서 아직 방문하지 않는 칸이 있다면 큐에 추가해주고, 방문 배열을 true로 변경해줬다.

 

제출 코드

import java.io.*;
import java.util.*;

public class BJ_1012_유기농배추 {
	public static void main(String[] args) throws NumberFormatException, IOException {
		int[][] move = {{-1,0},{0,1},{1,0},{0,-1}}; //북, 동 , 남 , 서
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine());
		for (int tc = 1; tc <= T; tc++) {
			String[] str = br.readLine().split(" "); 
			int N = Integer.parseInt(str[1]); //가로 세로 배추개수 저장
			int M = Integer.parseInt(str[0]);
			int K = Integer.parseInt(str[2]);
			int[][] map = new int[N][M];
			for (int i = 0; i < K; i++) { //배추 위치 저장
				str = br.readLine().split(" ");
				int r = Integer.parseInt(str[1]);
				int c = Integer.parseInt(str[0]);
				map[r][c] = 1;
			}
			int cnt =0;
			boolean [][] visit = new boolean[N][M]; //방문 체크
			for (int i = 0; i < N; i++) {
				for (int j = 0; j < M; j++) {
					if(map[i][j]==1 && !visit[i][j]) { //배추가 있고, 아직 방문하지 않은 배추이면
						cnt++;  //벌레수 추가
						Queue<int[]> que = new LinkedList<>();
						que.add(new int[] {i,j}); //첫 시작 위치
						visit[i][j] = true;
						while(!que.isEmpty()) { //bfs시작
							int[] t = que.poll();
							for (int l = 0; l < 4; l++) { //4방 탐색
								int ni = t[0] + move[l][0];
								int nj = t[1] + move[l][1];
								if(ni>=0 && ni<N && nj>=0 && nj<M 
										&& map[ni][nj]==1 &&!visit[ni][nj]) { //배추이면서 아직 방문하지 않았으면 
									que.add(new int[] {ni,nj}); //큐에 추가
									visit[ni][nj]=true; //방문 배열 true로 변경
								}
							}
						}
					}
				}
			}
			System.out.println(cnt);
		}
	}
}

 

728x90
반응형
저작자표시 비영리 동일조건 (새창열림)

'알고리즘 > BJ' 카테고리의 다른 글

[BJ] 백준 2748 피보나치 수2 (JAVA)  (0) 2022.04.13
[BJ] 백준 1003 피보나치 함수 (JAVA)  (0) 2022.04.12
[BJ] 백준 1065 한수 (JAVA)  (0) 2022.03.28
[BJ] 백준 13458 시험감독 (JAVA)  (0) 2022.03.27
[BJ] 백준 8958 OX퀴즈 (JAVA)  (0) 2022.03.25
    '알고리즘/BJ' 카테고리의 다른 글
    • [BJ] 백준 2748 피보나치 수2 (JAVA)
    • [BJ] 백준 1003 피보나치 함수 (JAVA)
    • [BJ] 백준 1065 한수 (JAVA)
    • [BJ] 백준 13458 시험감독 (JAVA)
    9_yoon
    9_yoon
    배울게 넘쳐나는 개발 세상에서 묵묵히 걸어가며 지식을 쌓는 신입 개발자

    티스토리툴바