알고리즘 공부하기!
[프로그래머스] 모의고사
hyer!!
2021. 3. 2. 17:20
programmers.co.kr/learn/courses/30/lessons/42840
코딩테스트 연습 - 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는
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 counts = [0, 0, 0];
// 정답과 수포자들의 답을 비교!
// 여기서 중요한 것은 답을 비교하기 전 수포자들의 답을 반복되는 수 만큼 나눠주는 것이다. 이거 안하면 에러남!
for(var i=0; i<answers.length; i++){
if(answers[i] == one[i % one.length]) counts[0]++;
if(answers[i] == two[i % two.length]) counts[1]++;
if(answers[i] == three[i % three.length]) counts[2]++;
}
// 가장 많이 맞은 수포자들을 배열에 넣어준다!
var max = Math.max(counts[0], counts[1], counts[2]);
if(counts[0] == max) answer.push(1);
if(counts[1] == max) answer.push(2);
if(counts[2] == max) answer.push(3);
return answer;
}
[i % one.length]를 쓰는 이유 : 수포자들의 반복되는 규칙의 수보다 정답의 길이가 길 때 값을 찾지 못하기 때문!
어려웠던 점 : else if를 사용해서 실행하니 counts도 안 세지고 배열도 입력되지 않았다.
else if를 사용하려면 여러가지의 경우의 수를 전체 입력해야 되기 때문에 실행되지 않은 것이다.
예를 들어 a, b, c가 있으면 a와 b, b와 c, c와 a를 비교해야 한다.