알고리즘_재귀

Hvvany·2023년 1월 22일
0

알고리즘

목록 보기
3/12

백준 2210.py

answer_set = set()
graph = [list(input().split()) for _ in range(5)]

def finder(i,j, answer):
    if len(answer) == 6:
        answer_set.add(answer)
        return
    dx = [-1,0,0,1]
    dy = [0,-1,1,0]
    for idx in range(4):
        x = i + dx[idx]
        y = j + dy[idx]
        if 0 <= x < 5 and 0 <= y < 5:
            finder(x,y, answer + graph[x][y])


for i in range(5):
    for j in range(5):
        cnt = 1
        finder(i,j,graph[i][j])
print(len(answer_set))

위의 식을 보면 answer + graph[x][y]로 바로 받아서 파라미터로 넘겨준다. 더하기 연산을 재귀 바로 위에서 변수에 담아서 값을 넘겨주면 재귀를 당한 함수 내부에서는 잘 전달 되지만 return을 하게 되면 answer의 값이 변화된 상태로 식이 진행이 되면서 원하는 값이 안나온다.

정리

  • global 변수 대신에 파라미터로 넘기기
  • 파라미터로 받은 변수를 조작한 후에 넘겨주면 재귀 한 함수가 return을 하게되었을 때 원래 변수가 조작된 상태로 그 다음 반복문을 실행하게 되어 문제가 된다. 연산을 파라미터로 넘겨주고 하든지 아니면 위의 코드처럼 넘기면서 하면 좋을 거 같다.
profile
Just Do It

0개의 댓글