알고리즘 문제 풀이 1

hyunju-song·2020년 10월 2일
0

ALGORITHM

목록 보기
1/14

Rock Paper Scissor 문제

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문 사용해주기

profile
코드 한 줄로, 세상의 가치를 만들자🌟

0개의 댓글