[백준] 2667번, 단지번호붙이기 (Python)

2021. 7. 8. 00:13·알고리즘/백준
728x90
반응형

문제

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

 

2667번: 단지번호붙이기

<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여

www.acmicpc.net

 

코드

import collections

n = int(input())
graph = [list(map(int,input().strip())) for _ in range(n)]
check = [[False]*n for _ in range(n)]

def bfs(x,y):
    count = 1
    check[x][y] = True
    queue = collections.deque()
    queue.append((x,y))
    dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < n and 0 <= ny < n:
                if graph[nx][ny] == 1 and check[nx][ny] == False:
                    count += 1
                    check[nx][ny] = True
                    queue.append((nx,ny))
    return count

result = []
for x in range(n):
    for y in range(n):
        if graph[x][y] == 1 and check[x][y] == False:
            result.append(bfs(x,y))

# 총 몇개의 단지가 있는지 계산해준다.
print(len(result))
result.sort()
for i in result:
    print(i)

총 몇개의 단지가 있는지랑 단지내의 가구수를 오름차순으로 출력하는 문제이다.

 

graph와 check 리스트를 통해 입력을 받은다음 2중 for문을 돌아 graph값이 1이고 check가 False인 경우에 bfs함수를 실행시켜준다.

서로연결된 1같은 경우는 모두 check가 True 바뀌기 때문에 bfs함수 실행 수 즉 result 리스트에 길이가 단지의 개수가 된다.

 

단지내의 가구수는 처음에 1로 시작하는데 왜냐하면 bfs(x,y)가 실행되었다는 얘기는 x,y는 1인것이 확정이기 때문에 count는 1부터 세어주면된다.

 

graph값이 1이고 check가 False인 경우에는 처음 접근한 1이기때문에 count +1해준다음에 queue를 모두 돌고나면 count를 리턴해주면된다.

반응형
저작자표시 (새창열림)

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 2636번, 치즈 (Python)  (0) 2021.07.08
[백준] 2468번, 안전영역 (Python)  (0) 2021.07.08
[백준] 1012번, 유기농 배추 (Python)  (0) 2021.07.06
[백준] 14502번, 연구소 (Python)  (0) 2021.07.06
[백준] 14889번, 스타트와 링크 (Python)  (0) 2021.07.04
'알고리즘/백준' 카테고리의 다른 글
  • [백준] 2636번, 치즈 (Python)
  • [백준] 2468번, 안전영역 (Python)
  • [백준] 1012번, 유기농 배추 (Python)
  • [백준] 14502번, 연구소 (Python)
wookcode
wookcode
공부한 내용들을 정리하고 기록하는 블로그입니다.
    반응형
  • wookcode
    wookcode
    wookcode
  • 전체
    오늘
    어제
    • 카테고리 (196) N
      • study (1) N
        • 아파치 카프카 애플리케이션 프로그래밍 with 자.. (0)
        • 인프런 (1) N
      • Live Study (15)
      • Programming (14)
        • Java (8)
        • Python (1)
        • Springboot (5)
        • MSA (0)
      • 알고리즘 (117)
        • 백준 (58)
        • 프로그래머스 (59)
      • 에러로그 (5)
      • 항해99 (23)
      • 면접 (1)
      • 프로젝트 (1)
      • CS (19)
        • 네트워크 (2)
        • 운영체제 (2)
        • 데이터베이스 (2)
        • 컴퓨터구조 (1)
        • Java (8)
        • Spring (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    항해마켓
    김영한
    인프런
    프로그래머스
    spring
    알고리즘
    정리
    에러
    버그
    후기
    java
    jpa
    회고
    그리디
    미니프로젝트
    브루트포스
    해결
    항해99
    SFlash
    괄호
    실전프로젝트
    코딩테스트
    SpringBoot
    파이썬
    백준
    orm
    조합
    카카오인턴
    카카오코딩테스트
    스파르타코딩클럽
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
wookcode
[백준] 2667번, 단지번호붙이기 (Python)
상단으로

티스토리툴바