나의 풀이
function solution(answers) {
var answer = [];
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]
let onecount = 0;
let twocount = 0;
let threecount = 0;
for(i=0; i<answers.length; i++){
one = [...one, one[i]]
two = [...two, two[i]]
three = [...three, three[i]]
if(answers[i]===one[i]){
onecount += 1
}
if(answers[i]===two[i]){
twocount += 1
}
if(answers[i]===three[i]){
threecount += 1
}
}
var max = Math.max(onecount, twocount, threecount);
if (onecount === max) answer.push(1);
if (twocount === max) answer.push(2);
if (threecount === max) answer.push(3);
return answer;
}
접근 방식
문제의 예시처럼 1,2,3이 반복되는 숫자를 미리 배열에 적어두고, 반복되는 숫자를 answers의 길이만큼 뒤에 계속 붙여주는 식으로 만들었고, answers[i]의 값과 비교한 뒤 같다면 카운트 해주는 변수를 하나씩 만들었다.
마지막에 제일 높은 숫자를 찾기위해 Math.max를 사용했고, 오름차순으로 정리하라는 제한 조건을 읽고
1,2,3 순서대로 비교해서 빈배열에 push해주는 방식으로 문제를 해결했다.
베스트 풀이
function solution(answers) {
var answer = [];
var a1 = [1, 2, 3, 4, 5];
var a2 = [2, 1, 2, 3, 2, 4, 2, 5]
var a3 = [ 3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
var a1c = answers.filter((a,i)=> a === a1[i%a1.length]).length;
var a2c = answers.filter((a,i)=> a === a2[i%a2.length]).length;
var a3c = answers.filter((a,i)=> a === a3[i%a3.length]).length;
var 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;
}
filter로 확인할 수 있는 방법도 있다는걸 알게됬고, 마지막 구문은 거의 비슷해서 그래도 잘 풀었구나 싶었다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 약수의 개수와 덧셈 (0) | 2022.07.29 |
---|---|
[프로그래머스] 실패율 (0) | 2022.07.29 |
[프로그래머스] 폰켓몬 (0) | 2022.07.28 |
[프로그래머스] 소수 만들기 (0) | 2022.07.28 |
[프로그래머스] 오픈채팅방 (0) | 2022.07.28 |