가위바위보 게임은 2인 이상의 사람이 동시에 '가위, 바위, 보'를 외치고 동시에 가위, 바위 또는 보 중에서 한 가지를 의미하는 손 모양을 내밀어 승부를 결정짓는 게임이다. 세 판의 가위바위보 게임을 할 경우, 한 사람은 세 번의 선택(예. 가위, 가위, 보)을 할 수 있다. 세 번의 선택으로 가능한 모든 경우의 수를 구하는 함수를 작성한다.
[
["rock", "rock", "rock"],
["rock", "rock", "paper"],
["rock", "rock", "scissors"],
["rock", "paper", "rock"],
// ...etc ...
]
** Advanced: 변수로 전달하는 판수에 맞는 정답을 return 하도록 작성한 함수를 바꿔 보세요.
rockPaperScissors(5); // => [['rock', 'rock', 'rock', 'rock', 'rock'], etc...]
처음에는 for문으로 시작하여 구현하려고 했으나, 어디선가 코드가 꼬이는 바람에 다시 처음부터 시작하였다.
이왕 뒤집어 엎은거 재귀로 돌려보기로 했다.
recursion의 파라미터에 count를 정의를 한 후 다시 재귀를 돌 때마다 바로바로 적용부터 한 후 재귀를 실행하게 하였다.
const rockPaperScissors = function(n) {
n = n || 3
let plays = ['rock', 'paper', 'scissors']
let res = [];
const recursion = (count = 0, nodeArr = []) => { // for의 늪 대신 재귀 사용
if(count === round) { // 종료조건 ---> 1번째 판 ~~~5번째판 까지만 계산하면 된, 5판 땐, res에 담고 리턴, 재귀 종료
return res.push(nodeArr);
};
plays.forEach(item => {
let newNodeArr = [...nodeArr, item]
recursion(count + 1, newNodeArr)
});
};
recursion();
return res;
};