프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
<내 풀이>
function solution(answers) {
var answer = [];
var one = [1,2,3,4,5];
var two = [2,1,2,3,2,4,2,5];
var three = [3,3,1,1,2,2,4,4,5,5];
var cnt = [0,0,0];
for(var i=0; i < answers.length; i++){
if(one[i % one.length] === answers[i]){
cnt[0] += 1;
}
if(two[i % two.length] === answers[i]){
cnt[1] += 1;
}
if(three[i % three.length] === answers[i]){
cnt[2] += 1;
}
}
cnt.forEach((element, idx) =>{
if(element === Math.max(...cnt)){
answer.push(idx + 1);
}
});
return answer;
}
1. answers배열 요소만큼 반복할 동안, one, two, three 배열 요소들을 반복적으로 돌면서 answers 요소와 비교한다.
2. 요소가 같다면 카운팅을 1씩 증가한다.
3. forEach를 통해 배열 요소별로 콜백 함수를 실행한다.
4. cnt배열에서 최대값인지 판단해, 맞다면 answer 배열에 푸시한다.
<다른 풀이>
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;
}
array.filter(callbackFunc(처리할 현재 요소, [처리할 현재 요소의 인덱스], [filter를 호출한 배열]))
: 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환한다.
인자로 들어간 콜백함수는 true를 반환하면 요소를 유지하고, false를 반환하면 버린다.
분석
1. filter(a, i) 인자로 처리할 요소와 해당 요소 인덱스를 담을 인자를 넣었다.
2. 현재 처리할 요소와 a1, a2, a3 배열의 각 요소가 같다면, 요소(a)를 유지하고 아니면 버린다.
3. 필터링 된 요소들의 수를 각각 a1c, a2c, a3c에 담는다.
4. Math.max()를 이용해 최댓값을 구한다.
5. 각 최대값인지 따져서 answer배열에 푸시한다. 여기서 전부 다 최댓값으로 같다면 오름차순으로 정렬해야 하기에 if문을 1부터 3까지 차례대로 실행되게 해 따로 정렬할 필요를 줄였다.
이 문제를 통해 filter함수, Math.max(), 화살표 함수 사용에 공부하게 됐다.
'알고리즘 문제풀기 > 프로그래머스' 카테고리의 다른 글
[2020 카카오 인턴십] 수식 최대화 - Python (0) | 2020.09.11 |
---|---|
[JavaScript] 프로그래머스 - 다리를 지나는 트럭 (0) | 2020.05.11 |
[JavaScript] 프로그래머스 - 위장 (0) | 2020.05.07 |
[JavaScript] 프로그래머스 - 가장 큰 수 (0) | 2020.05.07 |
[JavaScript] 프로그래머스 - K번째 수 (0) | 2020.05.06 |