[파이썬]백준 2667 단지번호붙이기

Byeonghyeon Kim·2021년 3월 3일
1

알고리즘문제

목록 보기
23/93
post-thumbnail

링크

백준 2667 단지번호붙이기


델타와 dfs를 활용해서 풀면 되는문제이다.
싸피 수업시간에 미로찾기에서 한번 호되게 당하고나니 이런류의 문제를 푸는게 조금 익숙해진 것 같다.


정답 코드

def dfs(r, c):
    global cnt
    visit[r][c] = 1
    for i in range(4):
        nr = r + dr[i]
        nc = c + dc[i]
        #범위를 벗어나지 않고 방문한적이 없는 곳에 대해서 탐색하여 cnt수 늘림
        if 0 <= nr < N and 0 <= nc < N and arr[nr][nc] != '0' and visit[nr][nc] == 0:
            visit[nr][nc] = 1
            cnt += 1
            dfs(nr, nc)
    return cnt

N = int(input())
arr = [input() for _ in range(N)]

#12시부터 시계방향
dr = [-1, 0, 1, 0]
dc = [0, 1, 0, -1]
visit = [[0] * N for _ in range(N)]
cnt = 1 #단지내 아파트 개수
ans = []

for i in range(N):
    for j in range(N):
        if arr[i][j] == '1' and visit[i][j] == 0: # 집이 있고 방문하지 않은 단지일 경우에만 탐색
            home = dfs(i, j)
            ans.append(home)
            cnt = 1 # 다음 탐색을 위해 cnt 초기화

ans.sort()
print(len(ans))
print('\n'.join(map(str, ans)))

알게된 것👨‍💻

  • 글로벌 변수를 다시사용할 생각이면 반드시 초기화를 해줄것!
profile
자기 주도 개발전 (개발, 발전)

0개의 댓글