728x90

Rock Paper Scissor 문제

recursion 활용 알고리즘 문제

TIP
recursion (재귀함수)의 활용,
배열 concat해서 합쳐주기
적절한 if문 사용해주기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
* 세 판의 가위바위보를 할 동안 낼 수 있는 모든 경우의 수를 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;
};
cs

 

728x90

+ Recent posts