bong-u/til

프로그래머스 - 무인도 여행 (L2)

수정일 : 2023-07-17

 1from collections import deque
 2
 3vx = [0, 0, -1, 1]
 4vy = [-1, 1, 0, 0]
 5
 6def solution(maps):
 7    N = len(maps)
 8    M = len(maps[0])
 9    answer = []
10
11    visited = [[False]*M for _ in range(N)]
12
13    for i in range(N):
14        for j in range(M):
15            if maps[i][j] != 'X' and not visited[i][j]:
16                cnt = 0
17                q = deque()
18                q.append((j, i))
19                visited[i][j] = True
20                while q:
21                    cx, cy = q.popleft()
22                    cnt += int(maps[cy][cx])
23                    for k in range(4):
24                        nx = cx + vx[k]
25                        ny = cy + vy[k]
26                        if 0 <= nx < M and 0 <= ny < N and maps[ny][nx] != 'X' and not visited[ny][nx]:
27                            q.append((nx, ny))
28                            visited[ny][nx] = True
29                answer.append(cnt)
30    if len(answer) == 0:
31        return [-1]
32    return sorted(answer)

문제

  • 문자열 배열 maps가 주어진다
  • 바다는 ‘X’, 섬은 숫자로 표현되는데, 숫자는 섬에서 최대한 보낼수 있는 날짜 수이다
  • 각 섬에서 최대한 며칠씩 머무를 수 있는지 오름차순으로 정렬해서 반환하라
  • 없다면 -1을 배열에 담아 반환하라
  • TC
    • input

      [“X591X”,“X1X5X”,“X231X”, “1XXX1”]

    • ouput

      [1, 1, 27]

해결방법

  • BFS로 간단하게 풀었다