[백준] 1926번 그림(C#)

2024. 3. 13. 18:19· 동식이 취업시키기 작전/코딩테스트
목차
  1. 문제
  2. 코드
  3. 고민
728x90

문제

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

 

1926번: 그림

어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로

www.acmicpc.net

코드

namespace dongsik
{
    class Algorithm
    {
        static int n, m;
        static int[,] graph;
        static bool[,] visited;
        static int[] dx = { 1, -1, 0, 0 };
        static int[] dy = { 0, 0, -1, 1 };
        static void Main(string[] args)
        {
            // n * m 입력 받기
            int[] input = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
            n = input[0];
            m = input[1];

            // graph 그리기
            graph = new int[n, m];
            visited = new bool[n, m];

            for (int i = 0; i < n; i++)
            {
                int[] inputGraph = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
                for (int j = 0; j < m; j++)
                {
                    graph[i, j] = inputGraph[j];
                }
            }

            int picCnt = 0;
            int maxSize = 0;

            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    if (graph[i, j] == 1 && !visited[i, j])
                    {
                        picCnt++;
                        int size = BFS(i, j);
                        maxSize = Math.Max(maxSize, size);
                    }
                }
            }

            Console.WriteLine(picCnt);
            Console.WriteLine(maxSize);
        }

        static int BFS(int x, int y)
        {
            Queue<(int, int)> queue = new Queue<(int, int)>();
            queue.Enqueue((x, y));
            visited[x, y] = true;
            int size = 1;

            while (queue.Count > 0)
            {
                (int cx, int cy) = queue.Dequeue();

                for (int i = 0; i < 4; i++)
                {
                    int nx = cx + dx[i];
                    int ny = cy + dy[i];

                    if (nx >= 0 && nx < n && ny >= 0 && ny < m && graph[nx, ny] == 1 && !visited[nx, ny])
                    {
                        queue.Enqueue((nx, ny));
                        visited[nx, ny] = true;
                        size++;
                    }
                }
            }
            return size;
        }
    }
}

고민

BFS는 인접한 값을 찾는 것이므로 얼음틀이나 그림처럼 연속되어 연결된 통로를 찾는데 적합하다.

 

BFS로 문제를 풀려면

GRAPH, VISITED

QUEUE가 필요하다.

 

1. 먼저 GRAPH, VISITED를 만들어준다.

2. 만들어진 GRAPH를 돌면서 BFS를 실행시켜준다.

3. BFS는 QUEUE를 사용해서 상하좌우로 이동해주고 이동하면서 조건이 맞는 좌표를 찾는다.

4. 찾으면 해당 좌표를 ENQUEUE한다. 찾지 못하면 반복문이 끝난다.

 

저작자표시 비영리 변경금지 (새창열림)

'동식이 취업시키기 작전 > 코딩테스트' 카테고리의 다른 글

[백준] 2667번 단지번호붙이기(C#)  (1) 2024.03.15
[백준] 2606번 바이러스(C#)  (1) 2024.03.15
[백준] 2178번 미로찾기(C#)  (1) 2024.02.08
[백준] 2110 공유기 설치(C#)  (0) 2024.02.05
[백준] 10815 숫자카트(C#)  (0) 2024.02.04
  1. 문제
  2. 코드
  3. 고민
'동식이 취업시키기 작전/코딩테스트' 카테고리의 다른 글
  • [백준] 2667번 단지번호붙이기(C#)
  • [백준] 2606번 바이러스(C#)
  • [백준] 2178번 미로찾기(C#)
  • [백준] 2110 공유기 설치(C#)
이동식이
이동식이
개발자가 되고싶은 동식이... 티스토리를 시작하게 되었다.
이동식이
동식이의 공부상자
이동식이
전체
오늘
어제
  • 분류 전체보기 (116)
    • 동식이 취업시키기 작전 (74)
      • 코딩테스트 (43)
      • 알고리즘 (5)
      • Unity (7)
      • CS (1)
      • 1차 프로젝트 : Overcooked2 (4)
      • FPS - Penguin party(feat. u.. (4)
      • UNITY로 FPS GAME 개발(FEAT. 1인.. (3)
      • 기업프로젝트 : Hacsamo (3)
    • 알고리즘 (15)
      • 백준 (4)
      • 프로그래머스 (10)
    • 일기 (3)
      • 회고 (0)
      • 리뷰 (0)
    • 자격증 (7)
      • 실기 (3)
      • 1. 요구사항 확인 (4)
    • Project (11)
      • Team Project (4)
      • Personal Project (0)
      • 베어머더러 (0)
      • 빵빵빵 타이쿤 (7)
    • 기술 블로그 염탐 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기
  • 관리자

공지사항

인기 글

태그

  • 유니티
  • [play games plugin 0.10.14] 06-11-25 23:27:52 +09:00 error: server auth code and id token require web clientid to configured. googleplaygames.ourutils.playgameshelperobject:update() [play games plugin 0.10.14] 06-11-25 23:27:52 +09:00 error: exception l
  • 애인에겐 머리를 조아려 감사함
  • 무한배경
  • 개인정보수집유효기간
  • Unity
  • 슬픈 런타임에러 증후군
  • system.action`1[t] callback) [0x00000] in <00000000000000000000000000000000>:0 at googleplaygames.ourutils.playgameshelperobject.update () [0x00000] in <00000000000000000000000000000000>:0 googleplaygames.ourutils.playgameshelperobject:update()
  • Python
  • 자료구조
  • 파이썬
  • 백준
  • 스택
  • 배경스크롤링
  • c#
  • 프로그래머스
  • 코딩테스트
  • 빵빵빵타이쿤
  • 아자아자 파이팅이닷!
  • Photon

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
이동식이
[백준] 1926번 그림(C#)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.