모의고사

연쇄코딩마·2021년 1월 7일
0
post-thumbnail

설명 : 모의고사

간단설명 : 시험을 포기한 사람들이 어떤 패턴대로 찍는데 많이 맞추는 순서대로 배열에 담아 리턴시키는 알고리즘이다.

전략 :
예를 들어
1번 수포자는 : 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 이런식으로 찍고
2번 수포자는 : 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번은 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

배열로 일반화 시켜보자면

```jsx
 const 수포자1 = [1, 2, 3, 4, 5];
 const 수포자2 = [2, 1, 2, 3, 2, 4, 2, 5];
 const 수포자3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
```

이렇게 된다.
이를 이용하여 for문을 하나하나 돌리고 정답카운터를 올리는 식으로 풀려고 계획했다.

function solution(answers) {
 const math1 = [1, 2, 3, 4, 5];
 const math2 = [2, 1, 2, 3, 2, 4, 2, 5];
 const math3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
 const ansCount = [0, 0, 0];//3명의 정답 카운터
 for (let i = 0; i < answers.length; i++) { // 포문 정답배열을 돈다.
   if (math1[i % math1.length] === answers[i]) { 
   
     ansCount[0]++;//=> 그리고 정답이 맞다면 카운터를 하나 올리는것!
   }
   if (math2[i % math2.length] === answers[i]) {
     ansCount[1]++;
   }
   if (math3[i % math3.length] === answers[i]) {
     ansCount[2]++;
   }
 }

 let result = []; 
 for (let j = 0; j < ansCount.length; j++) { //=> ansCount는 예를 들어 [5,0,0] 일건데 
   let max = Math.max(...ansCount);// 그 중 제일 큰것을 max에 담고 
   if (ansCount[j] === max) { //만약에 맥스와 같다면 
     result.push(j + 1);// 인덱스보다 하나가 커야되므로 + 1을하고 
   }
 }
 return result; //결과가 나온다.
}

jsx i % math1.length 대한 설명: 문제의 설명에도 나와 있듯이 문제의 갯수는 최대 10,000문제이기 때문에 수포자들의 패턴을 반복화 시킬필요가 있었다. 그러나 concat돌리기엔 낭비일꺼같고 그래서 수포자들의 정답배열을 인덱스와 수포자들의 한 패턴의 길이를 나누고 나머지를 받는다면 계속돌수 있을 거라 생각했다.

profile
只要功夫深,铁杵磨成针

0개의 댓글