내 잡다한 노트
프로그래머스) 무인도 여행 파이썬 본문
문제)
https://school.programmers.co.kr/learn/courses/30/lessons/154540
소스코드 )
def solution(maps):
answer = []
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
visited = []
for _ in range(len(maps)): # visited 셋팅
temp = []
for _ in range(len(maps[0])):
temp.append(False)
visited.append(temp)
for i in range(len(maps)):
for j in range(len(maps[0])):
if not visited[i][j] and not maps[i][j] == 'X': #방문 안했고 바다가 아니라면
q = [(i, j)]
sum = 0
visited[i][j] = True
while q:
temp_x, temp_y = q.pop(0)
sum += int(maps[temp_x][temp_y])
for k in range(4):
nx, ny = temp_x + dx[k], temp_y + dy[k]
if 0 <= nx < len(maps) and 0 <= ny < len(maps[0]):
if not visited[nx][ny] and not maps[nx][ny] == 'X':
q.append((nx, ny))
visited[nx][ny] = True
else:
continue
answer.append(int(sum))
if len(answer) !=0:
answer.sort()
else:
answer.append(-1)
return answer
좀 오랜만에 코테 문제를 풀다보니 visited를 for문까지 할 필요없이 한 줄로 끝내는 방법을 알았는데
금세 까먹었다... ㅡㅡ;;;
visited = [[False] * m for _ in range(n)] 을 기억하자.
bfs문제는 visited의 방문체크와 nx, ny가 지도를 벗어나는지도 확인 잘 하면 됨.
이 문제는 기초문제였다.
추가로, len(maps[0])과 len(map)이 자주 쓰인다면 변수를 따로 만들어서 쉽게 쓰자.
'백준, 프로그래머스(파이썬)' 카테고리의 다른 글
[C++] 백준 1920 수 찾기 (0) | 2023.09.07 |
---|---|
백준 파이썬 13549 문제 (0) | 2023.03.09 |
5014 스타트링크 백준 파이썬 (0) | 2022.09.16 |
3197 백조의 호수 (0) | 2022.08.11 |
17143 낚시왕 파이썬 백준 (0) | 2022.07.16 |