
생각 과정
수포자 별 찍는 패턴을 식으로 만들어서 정답과 매칭해보자.
-> 1번 수포자의 경우 6으로 나눈 나머지를 이렇게 저렇게... 하는 방식으로 작성하였지만 2번, 3번에서 시간이 너무 많이 걸렸다.
답을 고민하다 2번, 3번 수포자의 경우 자신의 정답 배열을 구성하여 그것과 맞는지 체크하도록 구상하였고,
1번 수포자도 통일하는 것이 바람직하게 느껴져 로직을 수정하였다.
function solution(answers) {
let score = Array(3).fill(0);
const answer = [];
const arr0 = [1, 2, 3, 4, 5];
const arr1 = [1, 3, 4, 5];
const arr2 = [3, 1, 2, 4, 5];
let idx0 = 0, idx1 = 0, idx2 = 0;
for (let i = 0; i < answers.length; i++) {
// 1번 수포자 답 확인
if (answers[i] === arr0[idx0]) score[0]++;
idx0++;
if (idx0 > 4) idx0 = 0;
// 2번 수포자
if (i % 2 === 0 && answers[i] === 2) score[1]++;
if (i % 2 !== 0 && answers[i] === arr1[idx1]) score[1]++;
if (i % 2 === 1) idx1++;
if (idx1 > 3) idx1 = 0;
// 3번 수포자
if (answers[i] === arr2[idx2]) score[2]++;
if (i % 2 === 1) idx2++;
if (idx2 > 4) idx2 = 0;
}
for (let i = 0; i < 3; i++) {
if (score[i] === Math.max.apply(null, score)) {
answer.push(i + 1);
}
}
return answer;
}
알게 된 것들
수포자 배열을 아예 그대로 옮겨오는 것도 나쁘지 않다.
그리고... 2차원 배열로 만들어서 배열 이름 하나로 일관되게 쓰는 것도 나쁘지 않다.
const patterns = [
[1, 2, 3, 4, 5], // 수포자 1
[2, 1, 2, 3, 2, 4, 2, 5], // 수포자 2
[3, 3, 1, 1, 2, 2, 4, 4, 5, 5], // 수포자 3
];
'문제 풀이 > Programmers' 카테고리의 다른 글
| [프로그래머스] 64061번: 크레인 인형뽑기 게임 (JavaScript) (0) | 2025.07.04 |
|---|---|
| [프로그래머스] 72410번: 신규 아이디 추천 (JavaScript) (0) | 2025.07.04 |
| [프로그래머스] 42862번: 체육복 (JavaScript) (0) | 2025.07.04 |
| [프로그래머스] 12982번: 예산 (JavaScript) (0) | 2025.07.04 |
| [프로그래머스] 12930번: 이상한 문자 만들기 (JavaScript) (0) | 2025.07.04 |