모의고사

박효상·2022년 4월 7일
0

코딩테스트

목록 보기
3/5
post-thumbnail

Problem

전체 문제의 정답이 담긴 배열과 1번,2번,3번 수포자의 답안 패턴이 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 반환하는 함수 구현

Algorithm

완전 탐색 : 빠른 계산이 가능한 컴퓨터의 성능에 의존하여 모든 경우의 수를 일일이 나열하면서 답을 찾는 기법이며, 크게 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로 구현

Solution

이번 문제는 완전탐색 기법 중에서도 for loop과 if 문만 활용한 Brute-Force

  1. 1번, 2번, 3번 수포자의 성적을 담을 배열 score 선언
  2. 1번, 2번, 3번 수포자의 답안 규칙이 담긴 배열 정의
  3. 정답이 담긴 배열 answers를 순회하며 score 배열에 성적 업데이트
  4. Math.max를 이용해 score 배열에서 가장 높은 성적 찾기
  5. score 배열을 순회하여 가장 높은 성적을 낸 수포자 찾기
  6. 해당 수포자의 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;
}
profile
집념의 백엔드 개발자

0개의 댓글