[프로그래머스] Lv.1 모의고사

Miro·2022년 8월 6일
0
post-thumbnail

프로그래머스 Lv.1 모의고사

문제, 제한 사항

입출력

나의 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function solution(answers) {
    let answer = [];
    let count = [000];
    let one = [12345];
    let two = [21232425];
    let three = [3311224455];
    
    for(let i = 0; i < answers.length; i++) {
        if(answers[i] === one[i % one.length]) count[0]++;
        if(answers[i] === two[i % two.length]) count[1]++;
        if(answers[i] === three[i % three.length]) count[2]++;
    }
    
    let max_num = Math.max(...count);
    
    for(let i = 0; i < count.length; i++) {
        if(count[i] === max_num) answer.push(i+1);
    }
    
    return answer;
}
cs

one, two, three에 각각 수포자들의 찍는 방식의 한 사이클을 표시한 배열을 할당했다.

반복문을 i가 0부터 answers의 길이까지 반복한다.
만약 answer[i]one, two, three[i % ~~.length]와 같다면 count의 각각 0, 1, 2번째를 1씩 증가 시킨다. -> (i를 각 배열의 길이로 나누면 배열을 변경하지 않고도 answers의 길이만큼 찍는 사이클 표시가 가능하다)

문제를 맞춘 횟수인 배열 count에서 Math.max를 사용하여 가장 큰 값을 찾아 max_num에 할당한다.

반복문을 i가 0부터 count의 길이만큼 반복한다.
만약 count[i]max_num과 같다면 빈 배열 answerpush 해준다.

+추가메모
아예 다른 방식으로 풀다가 결국 모든 테스트케이스를 통과하지 못 해서 구글링을 통해 다른 사람의 풀이인 i를 one, two, three의 길이로 나누는 방식을 참고 했다.
이번에는 혼자 힘으로 못 풀었지만 비슷한 유형을 또 만난다면 꼭 기억할 것.

profile
프론트엔드 개발자(진)

0개의 댓글