0. 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/154540
1. 풀이 방법
- 이중 for loop를 사용하여, 모든 맵을 훑는다.
- 이때 무인도인데, 방문한 적이 없다면 BFS를 통해 연결된 무인도를 찾고, 먹을 수 있는 모든 음식을 찾는다.
- 이를 append 하고, 반환은 정렬해서 반환하도록 한다.
2. 코드
from collections import deque
def solution(maps):
def bfs(y, x):
food = int(maps[y][x]) # 무인도의 음식들
dq = deque([(y, x)])
check[y][x] = True
while dq:
y, x, = dq.popleft()
for dy, dx in dir:
ny, nx = y + dy, x + dx
if 0 <= ny < h and 0 <= nx < w:
if maps[ny][nx] != 'X':
if not check[ny][nx]:
food += int(maps[ny][nx])
dq.append((ny, nx))
check[ny][nx] = True
return food
answer = []
h = len(maps)
w = len(maps[0])
check = [[False] * w for _ in range(h)]
dir = [(-1, 0), (1, 0), (0, -1), (0, 1)]
for y in range(h):
for x in range(w):
if maps[y][x] != 'X' and not check[y][x]:
answer.append(bfs(y, x)) # 바다가 아니고, 방문한 적이 없으면 bfs 실행
if answer:
answer.sort()
else:
answer.append(-1)
return answer
3. 마무리
'Computer Science > 알고리즘' 카테고리의 다른 글
[프로그래머스 - Python] 154538 - 숫자 변환하기 (0) | 2023.10.20 |
---|---|
[프로그래머스 - Python] 42883 - 큰 수 만들기 (0) | 2023.10.20 |
[프로그래머스 - Python] 67257 - 수식 최대화 (0) | 2023.10.20 |
[프로그래머스 - Python] 68936 - 쿼드압축 후 개수 세기 (0) | 2023.10.20 |
[프로그래머스 - Python] 42583 - 다리를 지나는 트럭 (0) | 2023.10.15 |