전체 방문자
오늘
어제
모달조아
Better than yesterday
모달조아
  • 분류 전체보기 (147)
    • PS (86)
      • BOJ (79)
      • 프로그래머스 (6)
    • 이론 (41)
      • 자료구조 (2)
      • 알고리즘 (8)
      • 데이터베이스 (1)
      • 운영체제 (1)
      • 네트워크 (3)
      • 디자인패턴 (7)
      • Java (13)
      • Spring (4)
      • JPA (1)
      • Git (1)
    • 개발 (18)
    • 프로젝트 (1)
    • 기록 (0)
      • 후기 (0)
    • etc (1)

최근 글

티스토리

hELLO · Designed By 정상우.
모달조아

Better than yesterday

PS/BOJ

BOJ 2667 단지번호붙이기

2021. 6. 25. 19:00

boj 2667 단지번호붙이기

간단한 bfs 구현 문제였다. 단지의 수는 지도를 돌면서 bfs를 도는 횟수를 구해주면 되고, 단지의 면적은 큐에 들어갈 때마다 1씩 증가시키면 된다. 코드에서 num은 단지의 수, area는 단지의 면적, v는 각 단지의 면적을 넣어줄 벡터이다.

#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <utility>
using namespace std;

string board[27];
bool vis[27][27];
int N;
int dx[4] = { -1,0,1,0 };
int dy[4] = { 0,-1,0,1 };
int num;
vector <int> v(num);


int main(void)
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    queue <pair<int, int>> q;
    cin >> N;
    for (int i = 0; i < N; i++) cin >> board[i];

    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            if (board[i][j] == '0' || vis[i][j] == 1) continue;
            num++;
            q.push({ i,j });
            vis[i][j] = 1;
            int area = 0;

            while (!q.empty())
            {
                area++;
                pair <int, int> cur = q.front();
                q.pop();

                for (int k = 0; k < 4; k++)
                {
                    int nx = cur.first + dx[k];
                    int ny = cur.second + dy[k];
                    if (nx < 0 || nx >= N || ny < 0 || ny >= N) continue;
                    if (board[nx][ny] == '0' || vis[nx][ny] == 1) continue;
                    q.push({ nx,ny });
                    vis[nx][ny] = 1;
                }
            }
            v.push_back(area);
        }
    }
    sort(v.begin(), v.end());
    cout << num << '\n';
    for (int i = 0; i < num; i++)
        cout << v[i]<<'\n';
}
저작자표시

'PS > BOJ' 카테고리의 다른 글

BOJ 1920 수 찾기  (0) 2021.06.26
BOJ 6603 로또  (0) 2021.06.25
BOJ 11652 카드  (0) 2021.06.25
BOJ 1931 회의실 배정  (0) 2021.06.23
BOJ 11047 동전 0  (0) 2021.06.23
    'PS/BOJ' 카테고리의 다른 글
    • BOJ 1920 수 찾기
    • BOJ 6603 로또
    • BOJ 11652 카드
    • BOJ 1931 회의실 배정
    모달조아
    모달조아

    티스토리툴바