세 판의 가위바위보 게임을 할 경우, 한 사람은 세 번의 선택(예. 가위, 가위, 보)을 할 수 있습니다.
세 번의 선택으로 가능한 모든 경우의 수를 구하는 함수를 작성합니다.
입력
없음
출력
arr[i]
)을 리턴해야 합니다.arr[i]
는 전체 경우의 수 중 한 가지 경우(총 세 번의 선택)를 의미하는 배열입니다.arr[i]
는 'rock', 'paper', 'scissors' 중 한 가지 이상을 요소로 갖는 배열입니다.arr[i].length
는 3주의사항
다 풀지 못했다.
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해야 맞는 것 같다.