문제
[1,2,3]을 넣으면
[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 경우의 수를 리턴
사건 발생
76번을 보면 caseArr이 잘 받아와지는데,
cases가 빈배열로 출력이 된다.
85번의 pop()이 cases까지 영향을 주는 것 같다.
아래는 해당코드
let cases = []
const makeCase = (numArr, caseArr) => {
if (caseArr.length === 3) {
cases.push(caseArr) // cases에 push
return
}
for (let i = 0; i < numArr.length; i++) {
let copyArr = [...numArr]
caseArr.push(numArr[i])
copyArr.splice(i, 1)
makeCase(copyArr, caseArr)
caseArr.pop()
}
}
makeCase([1, 2, 3], [])
console.log(cases)
해결
소통이 활발한 개발자 오픈채팅에 왜 연동이 되는건지 물어봤다.
연동이 싫으면 복사해서 넣으라는 답변을 듣고 바로 실천했다.
let cases = []
const makeCase = (numArr, caseArr) => {
if (caseArr.length === 3) {
cases.push(caseArr) // cases에 push
return
}
for (let i = 0; i < numArr.length; i++) {
let copyArr = [...numArr]
caseArr.push(numArr[i])
copyArr.splice(i, 1)
answer = [...caseArr] // 추가한 부분
makeCase(copyArr, answer)
caseArr.pop()
}
}
makeCase([1, 2, 3], [])
console.log(cases)
오랜만에 재귀함수를 작성하니까 재미있다.
꼼꼼하게 따져야해서 시간소모가 크지만 뿌듯하다.
pop 했는데 왜 위에있는 함수가 영향을 받는지 더 찾아봐야겠다.