출처 : 프로그래머스
https://programmers.co.kr/learn/courses/30/lessons/42840
❌ Solution ( 정확성: 35.7)
function solution(answers) {
const answer = [];
const one = [1,2,3,4,5];
const two = [2,1,2,3,2,4,2,5];
const three = [3,3,1,3,2,3,4,4,5,5];
let oneScore = 0;
let twoScore = 0;
let threeScore = 0;
const arr = [];
for(let i = 0; i < answers.length; i++) {
if(answers[i] === one[i]) {
oneScore++;
}
if(answers[i] === two[i]) {
twoScore++;
}
if(answers[i] === three[i]) {
threeScore++;
}
}
arr.push(oneScore);
arr.push(twoScore);
arr.push(threeScore);
const max = Math.max(oneScore,twoScore,threeScore);
for(let i = 0; i < arr.length; i++) {
if(arr[i] === max) {
answer.push(i+1)
}
}
return answer;
}
1. 반복문을 사용하여 답안 배열 answers 와 수포자들이 찍은 방식 배열을 비교한다.
2. 답안 배열의 값과 수포자들이 찍은 방식 배열의 값이 일치하면, 각 score 변수에 1씩 더한다.
3. 해당 score 변수는 각각 수포자들이 맞힌 문제 갯수를 의미하고, 이를 arr 배열에 추가한다.
4. 각 score 변수들 중 최댓값을 구한다.
5. arr 배열을 반복문을 사용하여 모든 인자들과 max 값을 비교하여 max값과 동일하면 해당 i 값을 answer 배열에 추가한다.
❌ 만약 답안 배열의 length가 수포자들이 찍은 방식 배열의 length를 넘어갔을 경우에 대해서는 대응하지 못한다.
✅ Solution
function solution(answers) {
const answer = [];
const supo = [ [1,2,3,4,5], [2,1,2,3,2,4,2,5], [3,3,1,1,2,2,4,4,5,5]]
let score = [];
for(let i = 0; i < supo.length; i++) {
score[i] = answers.filter((el, idx) =>
el === supo[i][idx % supo[i].length]).length;
}
let max = Math.max(...score);
for(let i = 0; i < score.length; i++) {
if(score[i] === max){
answer.push(i+1)
}
}
return answer;
}
1. 각 수포자들의 방식을 supo 배열안에 배열로 넣어 한꺼번에 관리한다.
2. supo 배열안의 배열들을 반복문을 사용하여 정답이 들어있는 answers 배열과 비교한다.
이때, answers 배열의 갯수가 supo 배열의 갯수를 초과했을 때도 비교가 가능하도록 answers 배열 인자의 index를 supo 배열의 length 로 나누어서 반복비교될 수 있도록 한다.
3. score 배열의 각 index에 해당 2번 단계에서 filter를 거쳐 나온 배열의 length 값 ( answers 배열과 각 수포자의 방식인 supo 배열안의 배열을 각각 비교하여 정답인 것들만 따로 모은 배열) 의 length 값을 할당한다.
4. score 배열에서 최댓값 max 변수를 구한다.
5. max 변수와 score 배열의 각 인자들을 비교하여 최댓값과 동일한 값들은 answer 배열에 추가한다.
💡 spread 연산자에 대해 다시 공부할 것
최댓값을 구하는 `Math.max(score)` vs `Math.max(...score)`
참고
랩보다 코딩 더 잘해지기 블로그
'알고리즘' 카테고리의 다른 글
프로그래머스 JS | 이상한 문자 만들기 (0) | 2022.06.29 |
---|---|
프로그래머스 JS | 실패율 (0) | 2022.06.27 |
백준 JS | 17478번 재귀함수가 뭔가요? (0) | 2022.06.21 |
백준 JS | 1929번 소수 구하기 (0) | 2022.06.13 |
백준 JS | 4948번 베르트랑 공준 (0) | 2022.06.10 |