전체 문제의 정답이 담긴 배열과 1번,2번,3번 수포자의 답안 패턴이 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 반환하는 함수 구현
완전 탐색 : 빠른 계산이 가능한 컴퓨터의 성능에 의존하여 모든 경우의 수를 일일이 나열하면서 답을 찾는 기법이며, 크게 5개의 알고리즘이 존재
- Brute-Force : 무식하게 문제를 푼다는 뜻이며, 단순 for loop과 조건문 if를 활용하여 문제를 푸는 알고리즘
- Recursion : 재귀 함수를 통해 문제를 푸는 알고리즘
- Permutation : 순열을 뜻하며 서로 다른 n개 중 r개를 고를 때 순서와 관계없이 가능한 경우의 수를 뜻한다. nPr 로 순열을 표현하며 이는 (n!)/(n-r)!로 경우의 수를 계산하고 재귀 함수로 구현
- DFS : Depth-First-Search의 줄임말로 깊이 우선 탐색이라고 부르며, 자료구조 Stack과 Recursion으로 구현
- BFS : Breadth-First-Search의 줄임말로 넓이 우선 탐색이라고 부르며, 자료구조 Queue로 구현
이번 문제는 완전탐색 기법 중에서도 for loop과 if 문만 활용한 Brute-Force
- 1번, 2번, 3번 수포자의 성적을 담을 배열 score 선언
- 1번, 2번, 3번 수포자의 답안 규칙이 담긴 배열 정의
- 정답이 담긴 배열 answers를 순회하며 score 배열에 성적 업데이트
- Math.max를 이용해 score 배열에서 가장 높은 성적 찾기
- score 배열을 순회하여 가장 높은 성적을 낸 수포자 찾기
- 해당 수포자의 Index를 answer 배열에 담아 반환
function solution(answers) { let answer = [], a = 0, b = 0, c = 0, max = 0; let score = [0,0,0]; let first = [1,2,3,4,5]; let second = [2,1,2,3,2,4,2,5]; let third = [3,3,1,1,2,2,4,4,5,5] for (let i = 0; i < answers.length; i++) { if (first[i%first.length] === answers[i]) { score[0]++; } if (second[i%second.length] === answers[i]) { score[1]++; } if (third[i%third.length] === answers[i]) { score[2]++; } } max = Math.max(score[0], score[1], score[2]) score.map((v,i) => { if (v === max) { answer.push(i+1); } }) return answer; }