chyam

[프로그래머스 Lv2, python] - 무인도 여행 본문

프로그래머스/LV2

[프로그래머스 Lv2, python] - 무인도 여행

chyam_eun 2025. 3. 11. 16:26

from collections import deque

def solution(maps):
    li=[]
    m,n=len(maps),len(maps[0]) # m행 n열
    visited= [[False]*n for _ in range(m)] # 방문 여부 
    direct=[[1,0],[0,1],[-1,0],[0,-1]] # 아래 오른쪽 위 왼쪽    
    
    for i in range(m):
        maps[i]=list(maps[i]) # 리스트로 변환
    
    def bfs(x,y):
        queue=deque([(x,y)])
        visited[x][y]=True # 방문처리
        cnt=int(maps[x][y]) # 처음 식량의 수
        while queue:
            x,y=queue.popleft()
            for dx,dy in direct:
                if 0<=x+dx<m and 0<=y+dy<n and maps[x+dx][y+dy]!="X" and not visited[x+dx][y+dy]:
                    visited[x+dx][y+dy]=True # 방문처리
                    queue.append([x+dx,y+dy]) 
                    cnt+=int(maps[x+dx][y+dy])    

        li.append(cnt) 
            
    for i in range(m):
        for j in range(n):
            if not visited[i][j] and maps[i][j]!="X": # 각 행렬에 접근하기
                bfs(i,j)
    li.sort() # 정렬           
    if len(li)==0: # 바다만 있으면 -1
        return [-1]
    
    return li