모의고사
filter랑 친해지기 d-^0^-b
문제 설명
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 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 함수를 작성해주세요.
예시
answer | return |
[1, 2, 3, 4, 5] | [1] |
[1, 3, 2, 4, 2] | [1, 2, 3] |
코드 해석 및 전체 코드
알고리즘
1.stu = 학생들이 찍은 번호를 배열에 담는다.
2. cnt = 맞은 개수를 담을 배열을 선언한다.
3. filter 이용하여 맞은 개수를 구한다.
4. cnt 중 최댓값을 구한다.
5. 최댓값과 맞은 개수가 같을 경우 answer 배열에 학생 번호를 담는다.
filter(ele, index, array), thisArg)
ele → 배열의 요소 값
index → 요소의 인덱스
array → 사용되는 배열 객체
thisAray → filter에 사용될 this값
3. filter 이용하여 맞은 개수를 구한다.
answer → 정답이 담긴 배열
cnt → answer 배열의 요소 값
i → 요소의 인덱스
cnt === stuN[i % stuN.length]) → cnt와 i를 sntN 배열에서 stuN.length를 나눈 인덱스와 같은 경우만 반환
cnt.push(answers.filter((cnt, i) => cnt === stu1[i % stu1.length]).length);
cnt | stu1[i % stu1.length] | true / false |
1 | 0 % 5 = 0 stu[0] = 1 |
1 === 1 true |
2 | 1 % 5 = 1 stu[1] = 2 |
2 === 2 true |
3 | 2 % 5 = 2 stu[2] = 3 |
3 === 3 true |
4 | 3 % 5 = 3 stu[3] = 4 |
4 === 4 true |
5 | 4 % 5 = 4 stu[4] = 5 |
5 === 5 true |
4. cnt 중 최댓값을 구한다.
예시 1 경우 cnt는 [ 5, 0, 0 ]이다.
따라서 최댓값은 5이다.
5. 최댓값과 맞은 개수가 같을 경우 answer 배열에 학생 번호를 담는다.
max와 cnt[i]가 같을 경우 answer 배열에 i + 1을 배열 마지막에 추가한다.
function solution(answers) {
var answer = [];
//찍은 번호 배열에 담기
let stu1 = [1, 2, 3, 4, 5];
let stu2 = [2, 1, 2, 3, 2, 4, 2, 5];
let stu3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
//맞은 개수 배열에 담기
let cnt = [];
cnt.push(answers.filter((cnt, i) => cnt === stu1[i % stu1.length]).length);
cnt.push(answers.filter((cnt, i) => cnt === stu2[i % stu2.length]).length);
cnt.push(answers.filter((cnt, i) => cnt === stu3[i % stu3.length]).length);
//최댓값 구하기
let max = Math.max(...cnt);
//모두 맞은 개수가 없을 경우 다 꼴찌이므로 빈 배열 반환
if (max === 0) return [];
//최댓값과 맞은 개수가 같을 경우 answer 배열에 push
for (let i = 0; i < cnt.length; i++) {
if (max === cnt[i]) answer.push(i + 1);
}
return answer;
}
'코딩 테스트 > [JS] programmers 코딩 테스트 연습' 카테고리의 다른 글
[Programmers/JS] N개의 최소공배수 / 프로그래머스 코딩 테스트 연습 (0) | 2021.12.20 |
---|---|
[Programmers/JS] 체육복 / 프로그래머스 코딩 테스트 연습 (0) | 2021.07.18 |
[Programmers/JS] 제일 작은 수 제거하기 / 프로그래머스 코딩 테스트 연습 (0) | 2021.06.20 |
[Programmers/JS] 로또의 최고 순위와 최저 순위 / 프로그래머스 코딩 테스트 연습 (0) | 2021.06.20 |
[Programmers/JS] 완주하지 못한 선수 / 프로그래머스 코딩 테스트 연습 (0) | 2021.06.20 |
댓글