[알고리즘] 가위바위보(rockPaperScissors)

이재훈·2020년 12월 29일
0

문법 및 코드

목록 보기
3/5

문제

가위바위보 게임은 2인 이상의 사람이 동시에 '가위, 바위, 보'를 외치고 동시에 가위, 바위 또는 보 중에서 한 가지를 의미하는 손 모양을 내밀어 승부를 결정짓는 게임이다. 세 판의 가위바위보 게임을 할 경우, 한 사람은 세 번의 선택(예. 가위, 가위, 보)을 할 수 있다. 세 번의 선택으로 가능한 모든 경우의 수를 구하는 함수를 작성한다.

입출력 예시


  [
    ["rock", "rock", "rock"],
    ["rock", "rock", "paper"],
    ["rock", "rock", "scissors"],
    ["rock", "paper", "rock"],
    // ...etc ...
  ]


** Advanced: 변수로 전달하는 판수에 맞는 정답을 return 하도록 작성한 함수를 바꿔 보세요.


rockPaperScissors(5); // => [['rock', 'rock', 'rock', 'rock', 'rock'], etc...]

풀이

  • 재귀
  • forEach()

처음에는 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;

};
profile
코딩에서 인생을 배우다.

0개의 댓글