제출 코드
function solution(answers) {
let matchCount = new Object();
const supoza1 = [1, 2, 3, 4, 5];
const supoza2 = [2, 1, 2, 3, 2, 4, 2, 5];
const supoza3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
for (let i = 0; i < answers.length; i++) {
let order1 = i % supoza1.length;
let order2 = i % supoza2.length;
let order3 = i % supoza3.length;
if (answers[i] === supoza1[order1]) {
matchCount[1] = ++matchCount[1] || 1;
}
if (answers[i] === supoza2[order2]) {
matchCount[2] = ++matchCount[2] || 1;
}
if (answers[i] === supoza3[order3]) {
matchCount[3] = ++matchCount[3] || 1;
}
}
let result = whoIsBest(matchCount);
return result;
}
function whoIsBest(matchCount) {
let result = new Array();
let max = Math.max(...Object.values(matchCount));
for (const [key, value] of Object.entries(matchCount)) {
if (value === max) {
result = result.concat(Number.parseInt(key));
}
}
result.sort();
return result;
}
수포자가 가진 배열 인덱스에 answers 배열 인덱스를 맞추기 위해 나머지 연산(%)을 사용하였습니다.
let order1 = i % supoza1.length;
let order2 = i % supoza2.length;
let order3 = i % supoza3.length;
정답이라면 matchCount Object에 수포자에 해당되는 번호를 key로 하고
1을 더하거나 key가 없을 때는 1로 초기화합니다.
if (answers[i] === supoza1[order1]) {
matchCount[1] = ++matchCount[1] || 1;
}
whoIsBest 함수는 matchCount Object를 받아 결과값(ex [2,3])을 반환합니다.
function whoIsBest(matchCount) {
let result = new Array();
let max = Math.max(...Object.values(matchCount));
for (const [key, value] of Object.entries(matchCount)) {
if (value === max) {
result = result.concat(Number.parseInt(key));
}
}
result.sort();
return result;
}
Object 가 가진 value 들 중에 가장 큰 값을 max로 선정합니다.
let max = Math.max(...Object.values(matchCount));
Object.entries method를 사용해 key와 value를 얻어내어
value가 max와 같다면 key를 Number로 바꾸어 result 배열에 추가합니다.
for (const [key, value] of Object.entries(matchCount)) {
if (value === max) {
result = result.concat(Number.parseInt(key));
}
}
Solution with using filter
배열 filter 함수를 사용한 방법
function solution2(answers) {
let matchCount = new Object();
const supoza1 = [1, 2, 3, 4, 5];
const supoza2 = [2, 1, 2, 3, 2, 4, 2, 5];
const supoza3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
matchCount[1] = answers.filter(
(answer, index) => answer === supoza1[index % supoza1.length]
).length;
matchCount[2] = answers.filter(
(answer, index) => answer === supoza2[index % supoza2.length]
).length;
matchCount[3] = answers.filter(
(answer, index) => answer === supoza3[index % supoza3.length]
).length;
let result = whoIsBest(matchCount);
return result;
}
Solution not using Object and fuction whoIsBest
Object와 whoIsBest 메소드를 사용하지 않은 방법
function solution(answers) {
let result = new Array();
const supoza1 = [1, 2, 3, 4, 5];
const supoza2 = [2, 1, 2, 3, 2, 4, 2, 5];
const supoza3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
const match1 = answers.filter(
(answer, index) => answer === supoza1[index % supoza1.length]
).length;
const match2 = answers.filter(
(answer, index) => answer === supoza2[index % supoza2.length]
).length;
const match3 = answers.filter(
(answer, index) => answer === supoza3[index % supoza3.length]
).length;
let max = Math.max(match1, match2, match3);
[match1, match2, match3].forEach((match, index) => {
if (match === max) {
result = result.concat(index + 1);
}
});
return result;
}
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
LEVEL 1 크레인 인형뽑기 게임 (0) | 2020.07.02 |
---|