TIL_210423

멜로디·2021년 4월 23일
0

Today I Learned

목록 보기
27/30
post-thumbnail

오늘 배운 것

  • 토이 풀어보기

토이 풀어보기

문제

세 판의 가위바위보 게임을 할 경우, 한 사람은 세 번의 선택(예. 가위, 가위, 보)을 할 수 있습니다.
세 번의 선택으로 가능한 모든 경우의 수를 구하는 함수를 작성합니다.

조건

입력
없음

출력

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

주의사항

  • 최종적으로 리턴되는 배열의 순서는 가중치 적용 정렬(Weighted Sort)을 따릅니다.
  • 중요도는 'rock', 'paper', 'scissors' 순으로 높습니다.

풀었나요

다 풀지 못했다.

const rockPaperScissors = function (rounds) {
// 결과를 담을 배열
  let result = [];
// 선택 가능한 요소들
  let choice = ['rock', 'paper', 'scissors'];

// 내부적으로 함수를 만들어서 경우의 수를 처리한다
  let finder = function(choice, m = []) {
    for(let i = 0; i < rounds; i++){
      if(result.length === 0){
        result.push()
      } else {
        let head = choice[0]
        let tail = choice.slice(1)
      }
    }
  }
// 재귀를 사용한다. rounds만큼 반복해야 함. (결과는 result에 push)
// 만약 result에 아무것도 없다면 choice[i]를 rounds만큼 추가한 배열을 만들어서 result에 push한다.
// 그렇지 않다면 
//   ㄴ choice를 가져와서 head와 tail로 나눈다.
//   ㄴ tail을 내부 함수에서 재귀로 돌린다.
//   ㄴ 순열과 같은 방법으로 모든 경우의 수를 만든다.

// 결과를 리턴
  

};

어떻게 풀어야 했나요

const rockPaperScissors = function (rounds) {
  rounds = rounds || 3;
  const rps = ['rock', 'paper', 'scissors'];

  const outcomes = [];
  let permutate = function (roundsToGo, playedSoFar) {
    if (roundsToGo === 0) {
      outcomes.push(playedSoFar);
      return;
    }

    for (let i = 0; i < rps.length; i++) {
      let currentPlay = rps[i];
      permutate(roundsToGo - 1, playedSoFar.concat(currentPlay));
    }
  };

  permutate(rounds, []);

  return outcomes;
};

비교해 봅시다. 무엇이 잘못되었나요

접근 자체는 유사한 방법으로 접근하였으나, 데이터를 처리하는 방법이 조금 다른 부분이 있다.
데이터를 만들자마자 바로 결과 배열에 넣는게 아니라 별도로 저장하여 보관하면서 그 데이터를 토대로 다음 경우의 수를 찾고, 더이상 경우의 수가 없을 경우 이차원 배열을 통째로 결과 배열에 push해야 맞는 것 같다.

profile
하루하루 배울때마다 기록하는 일기장

0개의 댓글