동캄의 코딩도장

프로그래머스 level2 [무인도 여행] 파이썬 본문

코테/프로그래머스

프로그래머스 level2 [무인도 여행] 파이썬

동 캄 2023. 4. 13. 22:56

https://school.programmers.co.kr/learn/courses/30/lessons/154540

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

#프로그래머스 level2 무인도 여행 파이썬

dr=[0,0,1,-1] # dr, dc 를 통해 상하좌우 방향 이동
dc=[1,-1,0,0]

def bfs(start,field):
    q=[]
    cnt=0 # 한 섬의 총 식량을 저장할 변수
    R,C=len(field),len(field[0]) # 행, 열 길이 받음
    start_r,start_c=start #시작점
    visited[start_r][start_c]=int(field[start_r][start_c])
    cnt+=visited[start_r][start_c] 
    q.append((start_r,start_c))
    while q: # 큐가 존재하면 계속 탐색
        r,c=q.pop(0)
        for i in range(4):
            mr=r+dr[i]
            mc=c+dc[i]
            if 0<=mr<R and 0<=mc<C and field[mr][mc]!='X' and visited[mr][mc]==0:
                visited[mr][mc]=visited[r][c]+int(field[mr][mc])
                cnt+=int(field[mr][mc])
                q.append((mr,mc))
    return cnt

def solution(maps):
    answer = []
    field=[]
    R=len(maps)
    C=len(maps[0])
    global visited
    visited=[[0]*C for _ in range(R)] # 방문 확인
    for i in range(R):
        field.append(list(map(str,maps[i])))
    for i in range(R):
        for j in range(C):
            if field[i][j]!='X' and visited[i][j]==0:
                answer.append(bfs((i,j),field))
    if answer:
        answer.sort()
        return answer
    else:
        return [-1]