가위바위보 게임은 2인 이상의 사람이 동시에 '가위, 바위, 보'를 외치고 동시에 가위, 바위 또는 보 중에서 한 가지를 의미하는 손 모양을 내밀어 승부를 결정짓는 게임입니다. 세 판의 가위바위보 게임을 할 경우, 한 사람은 세 번의 선택(예. 가위, 가위, 보)을 할 수 있습니다. 세 번의 선택으로 가능한 모든 경우의 수를 구하는 함수를 작성합니다.
n
Advanced
가위바위보 게임의 수를 나타내는 양의 정수 rounds가 주어질 경우, 해당 rounds 동안 선택할 수 있는 모든 경우의 수를 리턴하도록 함수를 작성해 보세요.
let output = rockPaperScissors(5);
console.log(output);
/*
[
["rock", "rock", "rock", "rock", "rock"],
["rock", "rock", , "rock", "rock", "paper"],
["rock", "rock", , "rock", "rock", "scissors"],
["rock", "rock", "rock", "paper", "rock"],
["rock", "rock", "rock", "paper", "paper"],
["rock", "rock", "rock", "paper", "scissors"],
["rock", "rock", "rock", "scissors", "rock"],
// ...etc ...
]
*/
📌 해당 문제의 경우 DFS 방식을 활용하였다.
function rockPaperScissors (n) {
let answer = [];
const caseOfPlay = ["rock", "paper", "scissors"];
let tmp = Array.from({ length: n}, () => 0)
const DFS = (L) => {
if (L === n) {
answer.push([...tmp])
}
else {
for ( let i = 0; i < caseOfPlay.length; i++) {
tmp[L] = caseOfPlay[i]
DFS(L+1)
}
}
}
DFS(0);
return answer;
}
아직 DFS에 익숙하지 않아 해당 문제를 푸는데 꽤 오랜 시간이 걸렸다. 더 많은 문제를 풀어보면 좋을 것 같다.