Completion over Perfection

프로그래머스 - 무인도 여행 (파이썬3 Python3) 본문

파이썬 (Python)

프로그래머스 - 무인도 여행 (파이썬3 Python3)

난차차 2023. 8. 20. 19:31
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/154540

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

DFS로 풀었는데 중간에 답이 중간에 몇개는 맞고 몇개는 런타임 에러가 뜨는 겁니다. ㅠ.ㅠ

알아보니 가로/세로 갯수가 100일 경우, 재귀가 최대 10000개 생성될 수도 있는데 파이썬의 기본 재귀 깊이가 1000이라서 런타임 에러가 뜬다고 하네요. 

 

아래 코드를 넣어주고 나서는 정상적으로 다 맞게 나왔습니다. 

 

     import sys
     limit_number = 10000
     sys.setrecursionlimit(limit_number)

 

방문처리는 따로 하지 않고 방문한곳은 'X'로 변경해주었습니다. 

(어차피 X는 나중에 방문하지 않게 될 것이므로)

 

마지막에 오름차순으로 정리해서 리턴해야되는 것도 주의해야됩니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
dx = [00-11]
dy = [1-100]
 
sum = 0
 
import sys
limit_number = 10000
sys.setrecursionlimit(limit_number)
 
def dfs(x, y):
    global sum
    for i in range(4):
        next_x = x+dx[i]
        next_y = y+dy[i]
        if next_x < 0 or next_x >= len(arr) or next_y < 0 or next_y >= len(arr[0]):
            continue
        else:
            if arr[next_x][next_y] == 'X':
                continue
            else:
                sum += int(arr[next_x][next_y])
                arr[next_x][next_y] = 'X'
                dfs(next_x, next_y)
    return sum
 
def solution(maps):
    global sum
    global answer
    answer = []
    global arr
    arr = []
    for map in maps:
        arr.append(list(map))
    for i in range(len(arr)):
        for j in range(len(arr[0])):
            if arr[i][j] == 'X':
                continue
            else:
                sum = 0
                sum = int(arr[i][j])
                arr[i][j] = 'X'
                answer.append(dfs(i, j))
 
    if answer == []:
        answer.append(-1)
    answer.sort()
    return answer
cs
반응형
Comments