Notice
Recent Posts
Recent Comments
관리 메뉴

즐겁게, 코드

BOJ 2667번 - 단지번호붙이기 본문

💯 알고리즘/백준 온라인 저지

BOJ 2667번 - 단지번호붙이기

Chamming2 2021. 3. 29. 00:04

[백준 온라인 저지 링크]

 

2667번: 단지번호붙이기

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

www.acmicpc.net

분명 테케는 통과했고 코드에도 문제가 없는데 계속 틀려 의아했다.

원인은 바로 탐색을 시작하는 첫 번째 노드를 방문했다고 체크하지 않아서였는데, 다행히도 금방 실수를 캐치할 수 있었다.

탐색을 시작하는 첫 번째 노드도 방문했음을 체크해주는걸 잊지 말고...

타입 캐스팅을 좀 더 세련되게 하는 방법이나 찾아봐야겠다 @__@

 

[정답 코드 - Python]

from collections import deque
T = int(input())

board = []
visited = [[False] * T for _ in range(T)]
apartCount = 0
countList = []

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


def BFS(start_node):
    s = deque()
    s.append(start_node)
    count = 1
    while len(s) != 0:
        node = s.popleft()
        visited[int(node[0])][int(node[1])] = True

        for i in range(4):
            nextY = int(node[0]) + dy[i]
            nextX = int(node[1]) + dx[i]
            if nextY >= T or nextY < 0 or nextX >= T or nextX < 0 or visited[
                    nextY][nextX] == True or board[nextY][nextX] == '0':
                continue
            else:
                count += 1
                visited[nextY][nextX] = True
                s.append([nextY, nextX])

    return count


for i in range(T):
    board.append(list(input()))

for i in range(T):
    for j in range(T):
        if board[i][j] == '1' and visited[i][j] == False:
            apartCount += 1
            countList.append(BFS([i, j]))

print(apartCount)
countList.sort()
for i in range(len(countList)):
    print(countList[i])

 

반응형

'💯 알고리즘 > 백준 온라인 저지' 카테고리의 다른 글

BOJ 9047번 - 6174  (0) 2021.04.10
BOJ 2178번 - 미로 탐색  (0) 2021.04.02
BOJ 1012번: 유기농 배추  (0) 2021.03.13
BOJ 1932번 - 정수 삼각형  (1) 2021.03.10
BOJ 15624번 - 피보나치 수 7  (0) 2021.03.08
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆