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