[Boj문제풀이]

[Boj/백준] 2667 Python

ki7348 2021. 9. 21. 14:46

문제출처: https://www.acmicpc.net/problem/2667

 

2667번: 단지번호붙이기

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

www.acmicpc.net

 

 

1. 문제 접근 방식

기존의 dfs방식대로 풀되 dfs 함수안에 global 변수를 선언해주고 graph[x][y] == 1일때마다 변수 값을 1씩 더해준다.

 

 

2. 내가 푼 코드

import sys

n = int(sys.stdin.readline())

graph = []
for i in range(n):
    graph.append(list(map(int,sys.stdin.readline().strip())))

dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

result = []

cnt = 0
total = 0

def dfs(x,y):
    global cnt
    
    if x<0 or x>=n or y<0 or y>=n:
        return False
    if graph[x][y] == 1:
        cnt+=1
        graph[x][y] = 0
        for i in range(4):
            dfs(x+dx[i],y+dy[i])
        return True

for i in range(n):
    for j in range(n):
        if dfs(i,j)==True:
            total+=1
            result.append(cnt)
            cnt = 0

print(total)
result.sort()
for i in result:
    print(i)

 

 

3. 결과 및 느낀점

함수 안에서 사용된 지역변수를 함수 바깥에서 사용하려면 global이라는 전역 변수 키워드를 사용하자!

'[Boj문제풀이]' 카테고리의 다른 글

[Boj/백준] 2583 Python  (0) 2021.09.22
[Boj/백준] 14716 Python  (0) 2021.09.21
[Boj/백준] 2644 Python  (0) 2021.09.20
[Boj/백준] 21773 Python  (0) 2021.09.18
[Boj/백준] 22252 Python  (0) 2021.09.17