문제
https://school.programmers.co.kr/learn/courses/30/lessons/42840?language=javascript
풀이
- 수포자가 찍는 패턴 - 12345 / 21232425 / 3311224455
- answers와 수포자의 답을 비교하기 위해 각 수포자의 답을 문자열로 준비한다.
- 크게는 pattern이 answers에 몇 번 들어가는지 몫만큼 반복되고, pattern이 짤려서 붙는 경우를 위해 나머지 개수만큼을 덧붙여준다. (repeat과 substr 사용)
- 답이 일치하는 횟수를 세기 위해 [0, 0, 0]으로 초기화한 count 변수를 준비한다.
- 수포자의 답을 순회하며 answers와 답을 비교하며 만약 같다면 count[index]에 +1을 해준다.
- count 중 max 값을 구하고, count를 돌며 max와 같은 값을 가졌다면 answers에 count의 인덱스 + 1을 push해 몇번 수포자인지 결과 배열에 넣는다.
function solution(answers) {
let answer = [];
const count = [0, 0, 0];
const pattern = ['12345', '21232425', '3311224455'];
const pick = []; // 수포자가 찍은 답안들
pattern.forEach((p) => {
let repeat = p.repeat(Math.ceil(answers.length / p.length));
pick.push(repeat + p.substr(0, answers.length % p.length));
});
pick.forEach((p, index) => {
for(let i = 0; i < answers.length; i++) {
if(answers[i] === Number(p[i])){
count[index] += 1;
}
}
});
let max = Math.max(...count);
count.forEach((c, index) => {
if(max === c) answer.push(index + 1);
});
return answer;
}
'알고리즘 이론 & 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv.1 | (스택/큐) 같은 숫자는 싫어 js (0) | 2023.08.09 |
---|---|
프로그래머스 Lv.2 | (DFS) 타겟 넘버 js (0) | 2023.08.09 |
프로그래머스 Lv.2 | (완전탐색) 소수찾기 js (0) | 2023.08.08 |
프로그래머스 Lv.1 | 전화번호 목록 js (0) | 2023.08.08 |
프로그래머스 Lv.1 | 완주하지 못한 선수 js (0) | 2023.08.08 |