3사람이 문제를 찍는 규칙이 있다.
이때 제공된 배열에서 각 세 사람의 점수를 계산하여
가장 높은 점수를 획득한 사람(들)의 배열을 반환하는 것이 문제이다.
문제는 두 부분으로 나뉜다.
첫번째는 점수 계산 부분과
두 번째는 각각의 점수를 통해 중복까지 판단해서 가장 높은 점수를 획득한 사람을 반환하는 부분이다.
첫번째 부분은 규칙이 정해져 있기 때문에 규칙을 담은 배열을 정답 배열과 비교하여 점수를 올리면 된다.
let first = [1, 2, 3, 4, 5];
let second = [2, 1, 2, 3, 2, 4, 2, 5];
let third = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
let score = new Array(3).fill(0);
for (let i = 0; i < answers.length; i++) {
if (answers[i] === first[i % first.length]) {
score[0] += 1;
}
if (answers[i] === second[i % second.length]) {
score[1] += 1;
}
if (answers[i] === third[i % third.length]) {
score[2] += 1;
}
}
로직은 같지만 filter로 하면 훨씬 깔끔하게 코드를 작성할 수 있다.
let first = [1, 2, 3, 4, 5];
let second = [2, 1, 2, 3, 2, 4, 2, 5];
let third = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
let score = new Array(3).fill(0);
score[0] = answers.filter((v, i) => (v === first[i%first.length])).length
score[1] = answers.filter((v, i) => (v === second[i%second.length])).length
score[2] = answers.filter((v, i) => (v === third[i%third.length])).length
두번째는 중복을 판단하여 가장 높은 점수를 획득한 사람(들)의 배열을 반환하는 부분이다.
자바스크립트의 sort 함수는 기존 배열의 순서 또한 변환하기 때문에
기존 배열 순서를 바꾸지 않기 위해서는 spreadable 객체를 사용하여 copy 해서 사용할 수 있다.
let max = [...score].sort((a,b) => b -a )[0];
사실 Math.max()함수를 사용하면 가장 편리하다^^
그 뒤에는 max값과 같은 배열의 인덱스를 찾아 배열에 푸시한다. (배열의 인덱스는 사람과 같다)
그러면 중복을 확인할 필요없이 max 값을 가진 모든 인덱스를 얻어올 수 있다.
아래는 완성된 코드이다
function solution(answers) {
let first = [1, 2, 3, 4, 5];
let second = [2, 1, 2, 3, 2, 4, 2, 5];
let third = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
let score = new Array(3).fill(0);
for (let i = 0; i < answers.length; i++) {
if (answers[i] === first[i % first.length]) {
score[0] += 1;
}
if (answers[i] === second[i % second.length]) {
score[1] += 1;
}
if (answers[i] === third[i % third.length]) {
score[2] += 1;
}
}
let answer = [];
let max = [...score].sort((a,b) => b -a )[0];
for(let i = 0 ; i < score.length; i++){
if(score[i] === max){
answer.push(i+1)
}
}
return answer;
}
'ps' 카테고리의 다른 글
[완전탐색] 카펫 (0) | 2020.11.20 |
---|---|
[완전 탐색] 소수 찾기 (0) | 2020.11.18 |
[정렬] 가장 큰 수, H-Index (0) | 2020.11.17 |
[우선순위큐] 디스크 컨트롤러 (0) | 2020.10.27 |
기능개발 (0) | 2020.10.18 |