프로그래머스 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 = [0, 0, 0]; 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]; 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
과 같다면 빈 배열answer
에push
해준다.
+추가메모
아예 다른 방식으로 풀다가 결국 모든 테스트케이스를 통과하지 못 해서 구글링을 통해 다른 사람의 풀이인i
를 one, two, three의 길이로 나누는 방식을 참고 했다.
이번에는 혼자 힘으로 못 풀었지만 비슷한 유형을 또 만난다면 꼭 기억할 것.