[백준] 2667번: 단지번호붙이기

2024. 12. 13. 20:59·PS

 

 


 

문제

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

 

 

개념

그래프, DFS, BFS

 

 

실행 결과

 

 

 

 

 

구현 코드(c++)

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int g[25][25];
bool v[25][25];
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
int n;

int dfs(int x, int y) {
  int cnt = 1;
  v[x][y] = true;

  for (int i = 0; i < 4; i++) {
    int nx = x + dx[i], ny = y + dy[i];
    if (nx >= 0 && ny >= 0 && nx < n && ny < n && !v[nx][ny] &&
        g[nx][ny] == 1) {
      cnt += dfs(nx, ny);
    }
  }
  return cnt;
}

int main() {
  cin >> n;
  cin.ignore();

  for (int i = 0; i < n; i++) {
    string line;
    getline(cin, line);
    for (int j = 0; j < n; j++) {
      g[i][j] = line[j] - '0';  // 아스키 자동 변환
    }
  }

  vector<int> danzis;
  int cnt = 0;

  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (!v[i][j] && g[i][j] == 1) {
        int size = dfs(i, j);
        danzis.push_back(size);
        cnt++;
      }
    }
  }

  cout << cnt << "\n";
  sort(danzis.begin(), danzis.end());

  for (int i = 0; i < danzis.size(); i++) {
    cout << danzis[i] << "\n";
  }

  return 0;
}

 

 

 

 

코드 설명

1인 요소들끼리 묶기 위해서, 2차원 그래프에서 1로 묶을 수 있는 부분들을 탐색한다.

이때 방향벡터 dx와 dy를 선언하고, dfs를 활용하여 1로 구성된 단지들을 구해서 danzies 배열에 넣는다.

최종적으로 각 단지 배열의 개수를 각각 출력하도록 한다.

 

주의해야할 점은 입력 받을 때 띄어쓰기 없이 한 행을 그대로 입력받는다. ex. 0101011

따라서 string 헤더를 선언하고 getline으로 문자열 line을 입력받도록 한 후에, 해당 값에서 문자 '0'값을 빼서 자동으로 숫자로 변환하도록 해야 한다!

 

 

 


 

저작자표시 (새창열림)

'PS' 카테고리의 다른 글

[코드트리] 선두를 지켜라  (0) 2025.01.03
[백준] 9935번: 문자열 폭발  (0) 2024.12.22
[코드트리] 제곱수의 합으로 나타내기  (0) 2024.12.08
[백준] 1010번: 다리 놓기  (0) 2024.10.23
[백준] Fly me to the Alpha Centauri  (0) 2024.10.17
'PS' 카테고리의 다른 글
  • [코드트리] 선두를 지켜라
  • [백준] 9935번: 문자열 폭발
  • [코드트리] 제곱수의 합으로 나타내기
  • [백준] 1010번: 다리 놓기
abyss-s
abyss-s
프론트엔드 공부합니다.
  • abyss-s
    abyss-s의 블로그입니다.
    abyss-s
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • Web (16)
        • JavaScript (6)
        • TypeScript (1)
        • React (5)
        • Vue (0)
        • Storybook (1)
        • Next.js (1)
      • Backend & Infra (8)
        • Database (3)
        • Node.js (2)
        • SpringBoot (1)
      • PS (71)
      • CS (30)
        • OS (13)
        • Structure & Algorithm (5)
        • Network (10)
        • 정보처리기사 (2)
      • Language (18)
        • OOP (1)
        • JAVA (13)
        • C++ (4)
      • Activities (12)
        • 멋쟁이 사자처럼 (2)
        • OSSCA (3)
        • LG U+ URECA (3)
        • Project (2)
      • AI (0)
      • Git & Github (5)
      • Notion (1)
      • IT (4)
      • Statistics (11)
      • Book (4)
      • Diary (1)
      • Game (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 백준
    • 트위터
  • 공지사항

    • abyss-s의 티스토리에 오신 것을 환영합니다.
  • 인기 글

  • 태그

    자바기반응용프로그래밍
    생활코딩
    React
    github
    JavaScript
    운영체제
    C++
    파이썬
    네트워크
    Python
    BFS
    BAEKJOON
    백준
    Java
    코드트리
    자바스크립트
    통계학
    OS
    그리디
    DP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
abyss-s
[백준] 2667번: 단지번호붙이기
상단으로

티스토리툴바