이 영역을 누르면 첫 페이지로 이동
자라자 블로그의 첫 페이지로 이동

자라자

페이지 맨 위로 올라가기

자라자

개발자를 준비하는 자라자의 블로그입니다.

백준 1926 그림 C++

  • 2022.02.06 19:55
  • PS/BOJ

백준로고

[문제 링크]

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

[입출력 예]

입력 출력
6 5
1 1 0 1 1
0 1 1 0 0
0 0 0 0 0
1 0 1 1 1
0 0 1 1 1
0 0 1 1 1
4
9

[소스코드]

//시작시간 19:05
#include <bits/stdc++.h>
using namespace std;

int board[500][500];
int visited[500][500];

int n, m;
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};

int max_area;
int cnt;

void print_borad()
{
  for (int i = 0; i < n; i++)
  {
    for (int j = 0; j < m; j++)
    {
      cout << board[i][j] << " ";
    }
    cout << '\n';
  }
}

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

  // 입력 받기
  cin >> n >> m;
  for (int i = 0; i < n; i++)
  {
    for (int j = 0; j < m; j++)
    {
      cin >> board[i][j];
    }
  }

  // 큐 생성, BFS.
  queue<pair<int, int>> Q;

  for (int i = 0; i < n; i++)
  {
    for (int j = 0; j < m; j++)
    {
      if (visited[i][j] == 1)
        continue;

      // 방문한 지점이 아니며 1인 경우.
      if (board[i][j] == 1)
      {

        // 방문표시
        visited[i][j] = 1;

        // 초기 너비 : 1
        int area = 1;
        cnt++;

        // 해당 좌표를 큐에 삽입 후 BFS
        Q.push(make_pair(i, j));
        while (!Q.empty())
        {
          pair<int, int> cur = Q.front();
          Q.pop();
          for (int i = 0; i < 4; i++)
          {
            int nx = cur.first + dx[i];
            int ny = cur.second + dy[i];

            if (nx < 0 || nx > n - 1 || ny < 0 || ny > m - 1)
              continue;
            if (visited[nx][ny] == 1)
              continue;

            if (board[nx][ny] == 1)
            {

              area++;
              visited[nx][ny] = 1;
              Q.push({nx, ny});
            }
          }
        }
        max_area = (max_area < area) ? area : max_area;
      }
    }
  }

  cout << cnt << '\n'
       << max_area;

  return 0;
}

// 처음에 ny범위를 m이 아니라 n 으로 적어서 틀림.

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

백준 11729번 하노이 탑 이동순서 C++  (0) 2022.02.08
백준 1629 곱셈 C++  (0) 2022.02.08
백준 5430 AC C++ 풀이  (0) 2022.02.05
BOJ 1021 회전하는 큐 C++  (0) 2022.02.02
백준 2164 카드2 c++  (0) 2022.02.01

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 백준 11729번 하노이 탑 이동순서 C++

    백준 11729번 하노이 탑 이동순서 C++

    2022.02.08
  • 백준 1629 곱셈 C++

    백준 1629 곱셈 C++

    2022.02.08
  • 백준 5430 AC C++ 풀이

    백준 5430 AC C++ 풀이

    2022.02.05
  • BOJ 1021 회전하는 큐 C++

    BOJ 1021 회전하는 큐 C++

    2022.02.02
다른 글 더 둘러보기

정보

자라자 블로그의 첫 페이지로 이동

자라자

  • 자라자의 첫 페이지로 이동

검색

메뉴

  • 🏠 HOME
  • 💡 ABOUT
  • 💻 GITHUB

카테고리

  • 분류 전체보기 (91)
    • Tech Note (3)
    • Dev Log (11)
    • Study Log (11)
    • Settings (3)
    • PS (53)
      • Programmers (21)
      • BOJ (32)
    • Diary (10)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 공식문서읽기
  • ㅣ
  • 리액트

나의 외부 링크

정보

자라자의 자라자

자라자

자라자

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © 자라자. Designed by Fraccino.

티스토리툴바