Coding

[Softeer] ์žฅ์• ๋ฌผ ์ธ์‹ ํ”„๋กœ๊ทธ๋žจ

๋‚จ๋ฐ”์˜ค 2023. 5. 23. 10:55

https://softeer.ai/practice/info.do?idx=1&eid=409 

 

Softeer

์—ฐ์Šต๋ฌธ์ œ๋ฅผ ๋‹ด์„ Set์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. ์ทจ์†Œ ํ™•์ธ

softeer.ai

๋ฌธ์ œ ํ•ด๊ฒฐ

๋ฐฑ์ค€์—์„œ ๋งŽ์ด ํ’€์—ˆ๋˜ ๋ฌธ์ œ๋ผ ์ฝ”๋“œ๋Š” ๋นจ๋ฆฌ ์งฐ๋Š”๋ฐ board ์ž…๋ ฅ์„ str์œผ๋กœ ๋ฐ›์•„๋†“๊ณ  ๊ณ„์† ๋น„๊ต๋ฅผ 0์œผ๋กœ ํ•˜๋‹ˆ๊นŒ ๋‹ต์ด ์•ˆ๋‚˜์˜ค์ง€..

 

๊ฐ„๋‹จํ•œ bfs ๋ฌธ์ œ์—ฌ์„œ visited๋กœ ํ™•์ธํ•œ ์ž๋ฆฌ์ธ์ง€ ์ฒดํฌ๋งŒ ํ•ด์ฃผ๋ฉด์„œ 1์ผ ๋•Œ ์นด์šดํŠธํ•ด์ฃผ๊ณ  ๊ทธ ๊ฐ’๋งŒ ๋งˆ์ง€๋ง‰์— ๋„˜๊ฒจ์ฃผ๋ฉด ๋˜๋Š” ๋ฌธ์ œ !

์ฝ”๋“œ

import sys
input = sys.stdin.readline
from collections import deque

N = int(input())
board = []
for i in range(N):
    board.append(list(input().strip()))

visited = [[0]*N for _ in range(N)]
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]
result = []

def solution(x , y):
    q = deque()
    q.append([x,y])
    visited[x][y] = True
    cnt = 1

    while q:
        x,y = q.popleft()

        for d in range(4):
            next_x = x + dx[d]
            next_y = y + dy[d]

            if  (0 <= next_x < N and 0 <= next_y < N) and (visited[next_x][next_y] == False) and board[next_x][next_y] == '1':
                q.append([next_x, next_y])
                visited[next_x][next_y] = True
                cnt += 1
        
    return cnt

for i in range(N):
    for j in range(N):
        if (board[i][j] == '1') and visited[i][j] == False:
            result.append(solution(i,j))

result.sort()
print(len(result))
for r in result:
    print(r)