- 프로그래머스 알고리즘: 다른사람의 풀이
- 첫번째 프로젝트 리팩토링 (react, express)
//슈도코드
//각 패턴을 배열로 만들어
//answers 값 같은 점수일때 점수를 하나씩 올린다.
//result에서 가장 점수가 높은 사람을 배열로 선정하여 내보낸다.
function solution(answers) {
const pattern = [
[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 = [0,0,0];
for(let k=0; k<3; k++){
for(let i=0; i<answers.length; i++){
if(pattern[k][i] === answers[i]){
score[k]++;
}
pattern[k].push(pattern[k][i]);
}
}
let maxNum = 0;
let answer = score.reduce((a,c,i)=>{
if(c>maxNum){
maxNum = c;
a = [i+1];
}else if(c === maxNum){
a.push(i+1);
}
return a;
},[])
return answer;
}
약간은 복잡하게 풀었다. 한번 검사할때마다 패턴 배열에 하나씩 숫자를 넣어서 answers의 길이가 패턴보다 길 때를 대비하고, score 배열에 숫자를 하나씩 플러스해준다. score 배열로 maxNum값에 값을 반영해주면서 maxNum보다 클때 answer 배열을 해당 currentValue로 리셋을 해주고 값이 그냥 같다면 answer 배열에 푸쉬를 해주도록 설정했다.
다른 사람의 풀이를 확인하니 filter 등과 max()값을 통해 좀 더 간단하게 풀 수도 있었을 것 같은데 너무 복잡하게 푼 것이 아쉽다. 고차함수를 활용하여 좀더 직관적으로 푸는 방법을 고민해봐야 겠다.