코딩테스트 파이썬/파이썬 프로그래머스 2단계
무인도 여행
세용용용용
2023. 6. 9. 21:13




나의 코드
def solution(maps):
answer = []
maps_list = []
for i in maps:
abab = []
for j in i:
abab.append(j)
maps_list.append(abab)
n = len(maps) #세로
m = len(maps[0]) #가로
def dfs(i,j):
answer = 0
if i<=-1 or i>=n or j<=-1 or j>=m:
return 0
if maps_list[i][j] != 'X':
#해당 노드 방문처리
answer = int(maps_list[i][j])
maps_list[i][j] = 'X'
answer += dfs(i-1,j)
answer += dfs(i+1,j)
answer += dfs(i,j-1)
answer += dfs(i,j+1)
return answer
return 0
for i in range(n):
for j in range(m):
if maps_list[i][j] != 'X':
answer.append(dfs(i,j))
if len(answer) == 0:
answer.append(-1)
#print(answer)
#print(maps_list)
answer.sort()
return answer
solution(["X591X",
"X1X5X",
"X231X",
"1XXX1"])

아니이이이잉 또 런타임에러 .... 진짜 요즘 이친구 안보는 날이 ....
최종코드
from collections import deque
def solution(maps):
answer = []
n = len(maps)
m = len(maps[0])
move = [(-1,0), (1,0), (0,-1), (0,1)]
visited_list = [[0]*m for _ in range(n)]
for x in range(n):
for y in range(m):
if maps[x][y] == 'X' or visited_list[x][y] == 1:
continue
q = deque()
q.append((x,y))
visited_list[x][y] = 1
second_answer = 0
while q:
nx, ny = q.popleft()
second_answer += int(maps[nx][ny])
for dx,dy in move:
if (0<=nx+dx<n) and (0<=ny+dy<m) and maps[nx+dx][ny+dy] != 'X' and visited_list[nx+dx][ny+dy] != 1:
q.append((nx+dx, ny+dy))
visited_list[nx+dx][ny+dy] = 1
if second_answer != 0:
answer.append(second_answer)
print(answer)
if answer:
answer.sort()
return answer
else:
return [-1]
solution(["X591X",
"X1X5X",
"X231X",
"1XXX1"])
하..., 개어렵다 ㅠㅠㅡ,,ㅠㅠ.ㅠ.ㅠ 도와줘요