Home 230214_Algorithm | 모의고사(Lv.1)
Post
Cancel

230214_Algorithm | 모의고사(Lv.1)

모의고사 (Lv.1)


문제 설명

  • 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 함
    • 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, …
    • 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, …
    • 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, …
  • 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성


제한사항

  • 시험은 최대 10,000 문제로 구성
  • 문제의 정답은 1, 2, 3, 4, 5중 하나
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬


입출력 예시

answersreturn
[1,2,3,4,5][1]
[1,3,2,4,2][1,2,3]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function solution(answers) {
  var answer = [];
  let user = [
    [1, 2, 3, 4, 5],
    [2, 1, 2, 3, 2, 4, 2, 5],
    [3, 3, 1, 1, 2, 2, 4, 4, 5, 5],
  ];

  let count = [0, 0, 0];

  for (let i = 0; i < answers.length; i++) {
    if (answers[i] === user[0][i % 5]) {
      count[0]++;
    }
    if (answers[i] === user[1][i % 8]) {
      count[1]++;
    }
    if (answers[i] === user[2][i % 10]) {
      count[2]++;
    }
  } // 여기까지 각 학생이 맞은 수

  const maxCount = Math.max.apply(null, count);

  for (let j = 0; j < 3; j++) {
    if (count[j] === maxCount) {
      answer.push(j + 1);
    }
  }
  return answer;
}




나름 풀이

  1. 수포자 1 , 수포자 2, 수포자 3의 찍는 순서를 user 배열로 작성
  2. 각 학생들이 정답을 맞히는 수를 배열로 저장하기 위하여 count라는 이름의 배열 작성 후 초기값을 0으로 설정
  3. for 문을 활용해서 답과 수포자 1(user[0]), 수포자 2(user[1]), 수포자 3(user[2])의 값과 답을 비교를 반복하는 함수를 만들고 이때 if문을 활용해서 답과 값이 일치하면 count배열이 1씩 증가
  4. 반복 범위는 정답인 answers의 길이만큼 설정하고 각배 열의 길이만큼 지속적으로 반복하기 위하여 비교하는 학생의 답은 i% 배열의 길이로 설정
  5. count배열의 최댓값을 구하기 위하여 Max.math.apply(null, 배열)을 사용 → for문을 사용하여 배열 안에 요소들을 순차적으로 비교
  6. answer 배열에 가장 큰 값의 위치에 1을 더한 후 추가


** 출처 : https://for-it-study.tistory.com/50

This post is licensed under CC BY 4.0 by the author.