[재귀] 01_rockPaperScissors

김형주·2021년 4월 23일
0

ToyProblem

목록 보기
1/2

rockPaperScissors

문제

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

입력값

없거나 혹은 양의 정수

출력

  • 2차원 배열(arr[i])을 리턴해야 합니다.
  • arr[i]는 전체 경우의 수 중 한 가지 경우(총 세 번의 선택)를 의미하는 배열입니다.
  • arr[i]는 'rock', 'paper', 'scissors' 중 한 가지 이상을 요소로 갖는 배열입니다.
  • arr[i].length는 3

주의사항

최종적으로 리턴되는 배열의 순서는 가중치 적용 정렬(Weighted Sort)을 따릅니다.
중요도는 'rock', 'paper', 'scissors' 순으로 높습니다.
쉽게 생각해 올림픽 순위 결정 방식을 참고하면 됩니다.
금메달('rock')이 은메달('paper')보다 우선하고, 은메달('paper')이 동메달('scissors')보다 우선합니다.

입출력 예시

let output = rockPaperScissors();
console.log(output);
/*   [
      ["rock", "rock", "rock"],
      ["rock", "rock", "paper"],
      ["rock", "rock", "scissors"],
      ["rock", "paper", "rock"],
      // ...etc ...
    ]*/

풀이

let rockPaperScissors = function (rounds) {
  // TODO: 여기에 코드를 작성합니다.
  //3개에서 하나 뽑기
  //순서에 따라서 조합이 달라짐
  //rock = A
  //paper = B
  //scissors = C
  //AAA AAB AAC ABA ABB ABC ACA ACB ACC
  //recursion 횟수가 가위바위보 횟수
  rounds = rounds || 3; //정의되어있지 않으면 3회, 정의되어있으면 원래대로 (문제 제대로 읽자)
  let round = 0;
  let selection = ["rock", "paper", "scissors"];
  let permutation = [];//전체 case 넣는 배열
  function recursive(gameCase, round){ //recursive에서 변수는 여기에 쓰는걸로
    //recusive 횟수 === rounds랑 같으면   //그래야 외부 다른 recursive에서 영향 안받는다.
    if(rounds === round){
      permutation.push(gameCase); //permutation global에 넣고
      return;                     //recursive 끝내고
    }
      selection.forEach((select)=>{                 //가위바위보 하나씩 넣는데
      recursive(gameCase.concat(select), round + 1);//round를 global로 보내지말고, 
                                                    //안에서만 영향받게
    });
  }
  
recursive([], round);//빈깡통을 보내서 안에서 변수명 붙여주게 해주는 방법
return permutation;  //recursive끼리만 변수를 공유한다.
};

재귀를 이미지로 나타내보기

모각코를 하다가 동기분께 알려드리는 과정에서 굉장히 좋은 그림이 하나 나와서 여기에 붙인다.
나는 라운드값을 증가시키는 식으로해서 로직이랑은 조금 다르지만 그래도 비슷한 의미이니, 이해하는데에는 아무 문제가 없을 것 같다.

profile
만물에 관심이 많은 잡학지식사전이자, 새로운 도전을 꿈꾸는 주니어 개발자 / 잡학지식에서 벗어나서 전문성을 가진 엔지니어로 거듭나자!

0개의 댓글