[트러블슛팅] DFS 재귀함수에서 유의할점 : 새 변수 생성(섬 갯수 문제 )

낭만개발자·2022년 3월 7일
0

알고리즘

목록 보기
15/20

문제

알고리즘 DFS 문제 풀다가 아웃풋이 이상하게 안나오길래 하나하나 체크하고 의심하다가 결국 마지막에 찾은 점이 변수 할당부분 이었다.

문제 코드

사진에 나온것 처럼 #78, #79행에 x, y를 저런식으로 할당해주면 #83행에 dfs(grid, x, y) 함수를 탔을때, #60행처럼 if조건에 걸려 return이 되더라도 해당 x , y값은 사라지지 않고 다음번 for loop에 사용되어 버린다.
원래 dfs 함수에서 종료조건에 걸리면 그 해당 인덱스 x, y는 사용되지 않고 그 전 인덱스 x, y를 사용해야 한다.

문제 결과

해결법

기존 x,y가 아닌 새 변수에 할당해주어야 한다.(그래야 조건이 아닐시 버리고 기존 x,y를 사용해 반복문을 돌릴수 있음)

해결 코드


중요 : 재귀 함수에 넣을 파라미터가 해당 문제의 인덱스라면, 인덱스 계산후에 새로운 let, const 변수에 할당해서 사용한다. 절대 x+= 형태로 사용하지 않는다.
위코드 처럼

해결 결과

재귀 종료조건에 걸리면 자연스럽게 그 전에 인데스 조건으로 돌아간다. 왜냐면 재귀함수 파라미터에는 새로운 변수로 값을 넣었기에 그 전 값 주소에 영향을 미치지 않는다.

profile
낭만닥터와 슬의를 보고 저런 개발자가 되어야 겠다고 꿈꿔봅니다.

0개의 댓글