프로그래머스 js 모의고사

이명진·2022년 9월 15일
0

코드카타

목록 보기
39/69

문제요약

모의고사를 보는데 수포자들이 있다 3명이 있는데 각자 찍는 방법이 다르다.
매개변수로 답지가 주어지고 답지와 비교했을때 많이 맞은 사람을 담아서 리턴하면된다.
가장 많이 맞은 사람을 리턴하는데 순위가 같다면 같은 사람들 모두 리턴하면 된다 .

내가 푼풀이

function solution(answers) {
    let cnt = [0,0,0];
  	const person1 = [1,2,3,4,5];
  	const person2 = [2,1,2,3,2,4,2,5]
    const person3 = [3,3,1,1,2,2,4,4,5,5]
  	let answer = [];
    answers.map((x,i)=>{
      if(x===person1[i%5]){
				cnt[0]++
      }
      if(x===person2[i%8]){
        cnt[1]++
      }
      if(x===person3[i%10]){
        cnt[2]++
      }
    
    })
  let max = Math.max(...cnt)
 	cnt.map((x,i)=>{
    if(x===max){
      answer.push(i+1)
    }
  })
  
    return answer
}

각각 수포자들의 패턴들을 지정해놓고 map을 사용하여 답지들과 하나씩 비교하여
카운트 숫자를 늘려주었다. 그리고 최댓값을 구해서 최댓값인 사람을 답배열에 넣어주었다.
길긴하지만 시간도 준수하고 다 맞출수 있었다.

다른사람의 풀이

function solution(answers) {
    var answer = [];
    var a1 = [1, 2, 3, 4, 5];
    var a2 = [2, 1, 2, 3, 2, 4, 2, 5]
    var a3 = [ 3, 3, 1, 1, 2, 2, 4, 4, 5, 5];

    var a1c = answers.filter((a,i)=> a === a1[i%a1.length]).length;
    var a2c = answers.filter((a,i)=> a === a2[i%a2.length]).length;
    var a3c = answers.filter((a,i)=> a === a3[i%a3.length]).length;
    var max = Math.max(a1c,a2c,a3c);

    if (a1c === max) {answer.push(1)};
    if (a2c === max) {answer.push(2)};
    if (a3c === max) {answer.push(3)};


    return answer;
}

filter함수를 사용하여서 조건에 맞는 값들만 정리한후에 맥스값과 비교를 해주었다.
이런 방법도 있다.

profile
프론트엔드 개발자 초보에서 고수까지!

0개의 댓글