recursion 활용 알고리즘 문제
/*
* 세 판의 가위바위보를 할 동안 낼 수 있는 모든 경우의 수를 return하는 함수를 작성하세요.
*
* 결과는 다음과 같을 것입니다.
* [["rock", "rock", "rock"],
* ["rock", "rock", "paper"],
* ["rock", "rock", "scissors"],
* ["rock", "paper", "rock"],
* ...etc ...
* ]
* Advanced:
* 변수로 전달하는 판수에 맞는 정답을 return 하도록 작성한 함수를 바꿔 보세요.
* rockPaperScissors(5); // => [['rock', 'rock', 'rock', 'rock', 'rock'], etc...]
*/
//1차로 짠 코드
const rockPaperScissors = function () {
const rps = ["rock", "paper", "scissor"];
const res = [];
function recur(res2, count) {
if (count === 3) {
res.push(res2);
}
//여기서 res 배열에 푸쉬된 후, 다시 돌아가야 하는데 계속 반복되고 있다.
rps.forEach((ele) => recur(res2.concat(ele), count++));
//변수안에 바로 count++를하고 디버깅을 하니, 변수의 증감이
//반영이 안되었다.
}
recur([], 0);
return res;
};
//2차로 짠 코드 => 테스트 통과
const rockPaperScissors = function(numbuer) {
if(numbuer === undefined){
numbuer = 3;
}//advanced 고려한 코드
let rps = ["rock", "paper", "scissors"];
let allRes = [];
let game = function(res, count){
if(count === numbuer){
allRes.push(res); //push 부분을 recur 안에 넣어줘야한다.
} else {
rps.forEach((elem) => {
game(res.concat(elem), count+1);
})
}
};
game([],0);
return allRes;
};
TIP
recursion (재귀함수)의 활용,
배열 concat해서 합쳐주기
적절한 if문 사용해주기