반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/154540
- 소요 시간 : 30분
- 난이도 : LV 2
나의 풀이
접근 방법
BFS의 정석과도 같은 문제
맵을 전체적으로 돌면서 숫자이고 방문하지 않았다면 BFS를 사용해 이어진 영역의 합을 구한다.
시간복잡도
이중 for 루프에서 모든 셀을 탐색하고, BFS로 연결된 모든 셀을 한 번씩만 방문하므로,
전체 시간 복잡도는 O(n * m)이다. (n <= 100, m <= 100)
코드
from collections import deque
def solution(maps):
answer = []
# n 세로 * m 가로
n = len(maps)
m = len(maps[0])
# 방문 체크
visited = [[False] * m for _ in range(n)]
def bfs(y, x):
q = deque()
q.append((y, x))
visited[y][x] = True
# 머물 수 있는 일수
days = 0
while q:
cy, cx = q.popleft()
days += int(maps[cy][cx])
for dy, dx in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
ny, nx = cy + dy, cx + dx
if 0 <= ny < n and 0 <= nx < m:
if maps[ny][nx] == 'X' or visited[ny][nx]:
continue
q.append((ny, nx))
visited[ny][nx] = True
return days
for y in range(n):
for x in range(m):
if maps[y][x] == 'X' or visited[y][x]:
continue
answer.append(bfs(y, x))
if answer:
answer.sort()
else:
answer.append(-1)
return answer
결과 : 정답
정리
쉬운 문제~
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 숫자 변환하기 - Python (0) | 2024.10.18 |
---|---|
[프로그래머스] 양과 늑대 - Python (4) | 2024.10.17 |
[프로그래머스] 미로 탈출 명령어 - Python (1) | 2024.10.16 |
[프로그래머스] 뒤에 있는 큰 수 찾기 - Python (2) | 2024.10.15 |
[프로그래머스] 귤 고르기 - Python (0) | 2024.10.15 |