HelloMinchan
처음처럼
HelloMinchan
LinkedIn
전체 방문자
오늘
어제
  • 분류 전체보기 (306)
    • Backend (4)
      • NestJS (1)
      • Express (1)
      • Spring (2)
    • Infrastructure (1)
      • AWS (1)
    • Frontend (1)
      • Next.js (1)
    • Language & Runtime (4)
      • Java (2)
      • Node.js (2)
    • Computer Science (8)
      • Computer Networks (3)
      • Operating Systems (4)
      • OOP (1)
    • 독서 (4)
      • 데이터 중심 애플리케이션 설계 (3)
      • 객체지향의 사실과 오해 (1)
    • 회고 (4)
      • Project (2)
      • Career (2)
    • Deprecated (280)

채널

  • GitHub
  • LinkedIn

최근 글

태그

  • 프로그래머스C++
  • 백준Python
  • 백준
  • 프로그래밍
  • 백준C++
  • back-end
  • Database
  • Baekjoon Online Judge
  • 알고스팟
  • 백준Go
  • 데이터베이스
  • 프로그래머스
  • programmers
  • 프로그래머스Python
  • 코딩
  • front-end
  • Algospot
  • 알고스팟Python
  • 백엔드
  • 개발자

최근 댓글

인기 글

hELLO
HelloMinchan

처음처럼

[Baekjoon Online Judge] 백준 2667번 단지번호붙이기(Python)
Deprecated

[Baekjoon Online Judge] 백준 2667번 단지번호붙이기(Python)

2020. 3. 28. 23:48

© 2020 All Rights Reserved. 주식회사 스타트링크

[Baekjoon Online Judge] 백준 2667번 단지번호붙이기

(Python)

(글쓴날 : 2020.03.28)

 


* Baekjoon Online Judge, 백준 2667번 문제 Python 언어 풀이입니다.

* 소스 코드의 저작권은 글쓴이에게 있습니다.


 

 

백준 2667번 단지번호붙이기


1) 문제

문제 링크 : https://www.acmicpc.net/problem/2667

 

2667번: 단지번호붙이기

<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집들의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. <그림 2>는 <그림 1>을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 수

www.acmicpc.net


2) 풀이 과정

0과 1이 저장되어 있는 2차원 배열 안에서 1이 담긴 곳을 집으로 가정하고 집들이 상하좌우로 연결되어 있는 공간을 단지로 가정했을 때 총 단지의 개수와 각 단지들에 속한 집들의 개수를 출력하는 문제입니다.

 

저의 경우 BFS를 적용해 문제를 해결했으며, 별 특이할 것 없이 완전 탐색을 하다 1이 나오면 BFS를 통해 상하좌우로 연결되어 있는 모든 집들을 찾아주시면 되겠습니다.


3) 코드

 

* Python 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import sys, queue
input = sys.stdin.readline
 
 
def BFS(i, j):
    global N, house, dx, dy, visit, district
    count = 0
    q = queue.Queue()
    q.put((i, j))
 
    while q.qsize():
        x, y = q.get()
 
        if visit[x][y] == False:
            visit[x][y] = True
            count += 1
            for way in range(4):
                ii, jj = x + dx[way], y + dy[way]
                if ii < 0 or ii > N - 1 or jj < 0 or jj > N - 1:
                    continue
                if house[ii][jj] == 1:
                    q.put((ii, jj))
    district.append(count)
 
 
N = int(input())
house = [list(map(int, input().rstrip())) for _ in range(N)]
dx, dy = [0, 0, 1, -1], [1, -1, 0, 0]
visit = [[False] * N for _ in range(N)]
district = []
 
for i in range(N):
    for j in range(N):
        if house[i][j] == 1 and visit[i][j] == False:
            BFS(i, j)
 
print(len(district))
print(*(sorted(district)), sep="\n")

 

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

'Deprecated' 카테고리의 다른 글

[Baekjoon Online Judge] 백준 4963번 섬의 개수(Python)  (0) 2020.03.29
[Baekjoon Online Judge] 백준 15649번 N과 M (1)(Python)  (0) 2020.03.28
[Baekjoon Online Judge] 백준 15686번 치킨 배달(Python)  (0) 2020.03.28
[Amazon Web Services] EC2 인스턴스에 PuTTY로 접속하는 법  (0) 2020.03.27
[Baekjoon Online Judge] 백준 14889번 스타트와 링크(Python)  (0) 2020.03.27
    'Deprecated' 카테고리의 다른 글
    • [Baekjoon Online Judge] 백준 4963번 섬의 개수(Python)
    • [Baekjoon Online Judge] 백준 15649번 N과 M (1)(Python)
    • [Baekjoon Online Judge] 백준 15686번 치킨 배달(Python)
    • [Amazon Web Services] EC2 인스턴스에 PuTTY로 접속하는 법
    HelloMinchan
    HelloMinchan
    Though you should not fear failure, You should do your very best to avoid it.

    티스토리툴바