[C++ / 백준 2667번] 단지번호 붙이기

2025. 2. 26. 12:37·프로그래밍 공부/백준 (C++)

문제

 

 

시행 착오

없음

 

 

해결 방법

순회하며 1을 찾고, 1을 찾은 위치에서 DFS 를 이용해 상하, 좌우에 1이 없을 때까지 탐색했다.

 

아래는 문제풀이 전에 직접  VS 에 작성한 방법이다.

DP 를 풀듯 차근차근 생각하는 것이 도움이 많이 되는 것 같다.

생각해 본 해결방법
  
1. 상하, 좌우 이렇게 두 경우만 집이 붙어있는 경우이다.
2. DFS / BFS 중 어느거라도 사용한다.
3. 몇 개가 붙어있는지 세고 오름차순으로 출력한다.

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <algorithm>


using namespace std;
vector<int> v;
int N;
int map[26][26];
bool visited[26][26] = { false };
int cnt = 0;

void DFS(int curY, int curX)
{
    if ( curY < 0 || curX < 0 || curY >= N || curX >= N || visited[curY][curX] ) return;

    cnt += 1;

    visited[curY][curX] = true;


        if (!visited[curY+1][curX] && map[curY+1][curX] == 1)
        {
            DFS(curY + 1, curX);
            
        }
        if (!visited[curY][curX+1] && map[curY][curX+1] == 1)
        {
            DFS(curY, curX + 1);
            
        }
        if (!visited[curY][curX-1] && map[curY][curX-1] == 1)
        {
            DFS(curY , curX - 1);
            
        }
        if (!visited[curY-1][curX] && map[curY-1][curX] == 1)
        {
            DFS(curY - 1, curX);
           
        }
    
    

}
int main() {    

    /*
    * 생각해 본 해결방법
    * 
    * 1. 상하, 좌우 이렇게 두 경우만 집이 붙어있는 경우이다.
    * 2. DFS / BFS 중 어느거라도 사용한다.
    * 3. 몇 개가 붙어있는지 세고 오름차순으로 출력한다.
    */
   
    cin >> N;


    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            scanf("%1d", &map[i][j]);
        }
    }
    
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cnt = 0;
            if (!visited[i][j] && map[i][j] == 1)
            {
                
                DFS(i, j);
                v.push_back(cnt);

            }
        }
    }

    sort(v.begin(), v.end());
    cout << v.size() << '\n';
    for (auto i : v)
    {
        cout << i << '\n';
    }

    return 0;
}

 

'프로그래밍 공부 > 백준 (C++)' 카테고리의 다른 글

[C++ / 백준 2178번] 미로 탐색  (0) 2025.03.05
[C++ / 백준 4963번] 섬의 개수  (0) 2025.03.04
[C++ / 백준 1707번] 이분 그래프  (0) 2025.02.26
[C++ / 백준 11724번] 연결 요소의 개수  (0) 2025.02.22
[C++ / 백준 1260번] DFS와 BFS  (0) 2025.02.21
'프로그래밍 공부/백준 (C++)' 카테고리의 다른 글
  • [C++ / 백준 2178번] 미로 탐색
  • [C++ / 백준 4963번] 섬의 개수
  • [C++ / 백준 1707번] 이분 그래프
  • [C++ / 백준 11724번] 연결 요소의 개수
Rocketbabydolls
Rocketbabydolls
Rocketbabydolls
  • Rocketbabydolls
    With The Lights Out
    Rocketbabydolls
  • 전체
    오늘
    어제
    • 전체글 (183) N
      • 프로그래밍 공부 (117)
        • C (16)
        • Jumping into C++ (9)
        • MFC (C++) (1)
        • 자료구조 (1)
        • 알고리즘 (1)
        • 백준 (C++) (74)
        • 핸즈온 머신러닝 2판 (6)
        • Unseen 3기 준비 (4)
        • 원티드 포텐업 게임 개발자 양성과정 2기 (4)
      • 언리얼엔진5 (62) N
        • [Part1] 이득우의 언리얼 프로그래밍 (12)
        • [Part2] 이득우의 언리얼 프로그래밍 (2)
        • [Part2 복습] 이득우의 언리얼 프로그래밍 (3)
        • [Part3] 이득우의 언리얼 프로그래밍 (14)
        • [Part4] 이득우의 언리얼 프로그래밍 (0)
        • FPS 게임 1인 프로젝트 (6)
        • 각종 지식 (10) N
        • 블루프린트 Paper2D 로 게임 만들기 (14)
        • 팀 프로젝트 (1)
      • 일상 (1)
      • ETC (1)
        • 맥북 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      핸즈온 머신러닝 2판
      c언어
      실전C프로그래밍 실습문제
      실전 C프로그래밍
      언리얼엔진 중재자 패턴
      실전C프로그래밍 나중채
      언리얼엔진5 fps 프로젝트
      c++ 17298
      오블완
      실전 C 프로그래밍
      언리얼엔진 디자인 패턴
      C언어 실습문제
      티스토리챌린지
      언리얼엔진 옵저버 패턴
      실전 C프로그래밍 실습문제
      실전C프로그래밍
      실전 C프로그래밍 나중채
      언리얼엔진
      핸즈온 머신러닝
      언리얼엔진5
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    Rocketbabydolls
    [C++ / 백준 2667번] 단지번호 붙이기
    상단으로

    티스토리툴바