[python] 2667번 단지번호 붙이기

ideal dev·2022년 12월 1일
0

코딩테스트

목록 보기
1/69

1. 문제 링크 및 문제

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

1-1 문제 요약

: 연결되어 있는 1들의 그룹에 대해 몇개의 그룹인지, 그룹 당 1의 개수를 도출해내야 하는 문제

2. 해결 방법 생각해보자 ...

  1. (0,0)부터 마지막(n,n)까지 반복문 생성, 1일때만 GO !
  2. 1일 때 상하좌우로 이동하며 연결된 1의 개수 구하기 (DFS 사용해야겠구나!)
  3. visited 배열 사용 대신 방문한 좌표는 0 으로 만들어주기

3. 코드

N = int(input())
map = [list(map(int,input())) for _ in range(N)]

dx, dy = [-1,0,1,0],[0,-1,0,1] 
EachCount = 0 # 그룹 내 1의 개수
result = []

def dfs(x,y):
    global EachCount
    map[x][y] = 0
    EachCount += 1

    for i in range(4):
        xx, yy = x+dx[i], y+dy[i]
        if xx<0 or xx>=N or yy<0 or yy>= N :
            continue
        if map[xx][yy] == 1 :
            dfs(xx,yy)
    return EachCount

# (0,0)부터 (N,N)까지 탐색
for i in range(N):
    for j in range(N):
        if map[i][j] == 1 :
            EachCount = 0
            result.append(dfs(i,j))

print(len(result))
for i in sorted(result):
    print(i)

! 아차차

아래는 틀린 코드입니다

실수1. 입력이 0110100 이런 식으로 들어오는데 입력배열을 습관적으로 split 까지 적어버림
map = [list(map(int,input().split())) for _ in range(N)]
실수2. 오름차순인데 , sorted 까먹음
for i in result:
    print(i)

0개의 댓글