프로그래머스
check 함수
를 만들고 정답배열을 반복문 돌려 one, two, three 배열과 일치하는지 확인한다.answers.length
)와 수포자 1,2,3이 제출한 답안의 길이(one.length, two.length, three.length
)가 똑같아야 한다.push
해주면서 i===answer.length
가 될때까지 확인한다.checkVal 함수
를 만들고 배열의 세 요소 값을 비교하고 학생의 번호를 요소로 갖는 배열을 리턴한다.function solution(answers) {
let one = [1,2,3,4,5];
let two = [2,1,2,3,2,4,2,5];
let three = [3,3,1,1,2,2,4,4,5,5];
//채점하고 정답 개수를 리턴하는 함수
const check = (arr) => {
let correct = 0;
for(let i=0;i<answers.length;i++){
if(answers[i]===arr[i]) correct ++
arr.push(arr[i]);
}
return correct;
}
const oneRes = check(one);
const twoRes = check(two);
const threeRes = check(three);
//배열의 값들을 비교하고 최댓값을 갖는 요소의 인덱스+1을 요소로 값는 배열 리턴하는 함수
const compareVal = (arr) => {
const max = Math.max(...arr);
const output = []
for(let i=0;i<arr.length;i++){
if(arr[i]===max) output.push(i+1);
}
return output;
}
return compareVal([oneRes,twoRes,threeRes])
}
filter
의 인자로 들어가는 콜백함수의 인자인 요소와 인덱스를 활용했다.a1[i] === a[i+5]
, a2는 a2[i] === a2[i+8]
, a3는 a3[i] === a3[i+10]
이다. a[i] === a[i%a.length]
이다.function solution(answers){
let answer = [];
let a1 = [1,2,3,4,5];
let a2 = [2,1,2,3,2,4,2,5];
let a3 = [3,3,1,1,2,2,4,4,5,5];
const a1c = answers.filter((a,i) => a === a1[i%a1.length]).length;
const a2c = answers.filter((a,i) => a === a2[i%a2.length]).length;
const a3c = answers.filter((a,i) => a === a3[i%a3.length]).length;
const max = Math.max(a1c, a2c, a3c);
if(a1c === max) answer.push(1);
if(a2c === max) answer.push(2);
if(a3c === max) answer.push(3);
return answer;
}
Array.prototype.filter()
arr.filter(callback(element[, index[, array]])[, thisArg])
element
처리할 현재 요소
index
처리할 현재 요소의 인덱스
array
filter를 호출한 배열
thisArg
callback을 실행할 때 this로 사용하는 값
내가 푼 방법은 반복문을 돌면서 배열의 크기가 계속 커졌는데, 다른 풀이를 보니 패턴과 filter를 활용해 훨씬 간단하게 풀었다. filter에서 인덱스를 사용할 수 있다는 걸 잊어버리는데 이 문제로 다시 복습할 수 있었다.