leecom116

제이의 기술 블로그
  • Print (216)
    • Frontend (29)
      • React (3)
      • HTML, CSS (8)
      • JavaScript (11)
      • JQuery (4)
      • JSP (2)
    • Backend (59)
      • Java (31)
      • Spring (11)
      • Spring Boot (0)
      • Python (1)
      • Node.js (1)
      • C, C++ (12)
      • Linux (2)
    • Database (3)
      • MariaDB (0)
      • Oracle (0)
      • MySQL (0)
    • Project (1)
    • Algorithm (67)
      • 백준 (43)
      • 프로그래머스 (0)
      • 이코테 (6)
      • 코드업 (17)
    • Tool (2)
      • Git (1)
      • Log (1)
    • CS (4)
    • Tech Interview (18)
      • Java (9)
      • Web (9)
    • Study (31)
      • 인프런 (3)
      • 정보처리기사 (8)
      • util (4)
      • 쌍용 (14)

깃허브

    https://github.com/leecom116

«   2025/05   »
일 월 화 수 목 금 토
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

최근 글

인기 글

블로그 메뉴

  • 홈
  • 태그
  • 방명록

태그

  • 메타포어
  • 참조형 변수
  • 웹개발
  • 델파이 기법
  • 의존성 주입
  • 논리 연산자
  • JSP
  • 나선형 모델
  • 객체 배열
  • 코드업 기초100제
  • c언어
  • 웹 개발 부트캠프
  • Web Developer
  • static메서드
  • 코드업 기초
  • 나도코딩
  • 자바의 정석
  • 웹 개발
  • 코드업
  • C언어 프로젝트
  • char
  • HTML
  • 코드업 2차원 배열
  • 자바 예외 처리
  • man month
  • CSS
  • 산술 변환
  • 자바 인터페이스
  • Associate
  • 정보공학 방법론

최근 댓글

hELLO · Designed By 정상우.
leecom116
Algorithm/백준

백준 2667 (단지번호붙이기)

2024. 3. 21. 00:45

 

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {

    static int N; // 지도의 크기
    static int[][] arr; // 입력 받은 단지
    static boolean[][] visited; // 단지 체크
    static List<Integer> result; // 단지내 집의 수 모음
    static int[] dx = {1, 0, -1, 0};
    static int[] dy = {0, 1, 0, -1};

    static int each = 0; // 단지내 집의 수

    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        N = Integer.parseInt(br.readLine());

        arr = new int[N][N];
        visited = new boolean[N][N];
        result = new ArrayList<>();

        for(int j=0; j<N; j++) {
            String s = br.readLine();
            for(int i=0; i<s.length(); i++) {
                arr[j][i] = Character.getNumericValue(s.charAt(i));
            }
        }

        for(int j=0; j<N; j++) {
            for(int i=0; i<N; i++) {
            // 현재 위치가 1이고, 처음 방문할 경우
                if(arr[j][i] == 1 && visited[j][i] == false) {
                    visited[j][i] = true; // 방문 처리
                    each = 0; // dfs 돌기전에 단지 초기화
                    dfs(j, i);
                    result.add(each);

                }
            }
        }
        Collections.sort(result);

        bw.write(result.size() + "\n");
        for(int r : result) bw.write(r + "\n");
        bw.flush();
        bw.close();
    }

    static void dfs(int y, int x) {
        for(int k=0; k<4; k++) {
            int nx = x + dx[k];
            int ny = y + dy[k];

			// 다음 좌표가 지도 안에 존재할 경우
            if(nx >= 0 && ny >= 0 && nx < N && ny < N) {
            	// 다음 좌표가 1이고, 첫 방문일 경우
                if(arr[ny][nx] == 1 && ! visited[ny][nx]) {
                    visited[ny][nx] = true; // 방문 처리
                    dfs(ny, nx); // 재귀 함수 호출
                }
            }
        }
        each++; // 현재 단지의 집 +1
    }
}

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

 

 

2667번: 단지번호붙이기

<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여

www.acmicpc.net

 

저작자표시

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

[2606] 바이러스(Java)  (0) 2024.12.12
백준 15649 (N과 M (1))  (0) 2024.03.24
백준 11047 (동전 0)  (0) 2024.01.07
백준 11399 (ATM)  (0) 2024.01.01
백준 17219 (비밀번호 찾기)  (0) 2023.12.26
    'Algorithm/백준' 카테고리의 다른 글
    • [2606] 바이러스(Java)
    • 백준 15649 (N과 M (1))
    • 백준 11047 (동전 0)
    • 백준 11399 (ATM)
    leecom116
    leecom116

    티스토리툴바