프로그래머스#JS - 모의고사

SSO·2020년 1월 2일
0

프로그래머스Lv1

목록 보기
3/47

문제

https://programmers.co.kr/learn/courses/30/lessons/42840

풀이

  1. 2020
function solution(answers) {
    var answer = [];
    var len = answers.length;
    var one = [1, 2, 3, 4, 5,]; //5
    var two = [2, 1, 2, 3, 2, 4, 2, 5]; //8
    var three = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]; //10
    var count = [0,0,0];
    var maxNum = 0;
    
    for(var i=0; i<len; i++){
        if(answers[i] === one[i%5]){
            count[0] = count[0] + 1;
        }
        if(answers[i] === two[i%8]){
            count[1] = count[1] +1;
        }
        if(answers[i] === three[i%10]){
            count[2] = count[2] + 1;
        } 
    } 
    maxNum = Math.max(...count);
  
    for(var j=0; j<3; j++){
        if(count[j] === maxNum){
          answer.push(j+1);
        }
    }

    return answer;
}

풀이과정 문제점

반복되는 패턴을 수포자의 답 배열 자체가 아니라, 그 index를 기준으로 생각했어야 하는데, 구체적인 숫자의 패턴을 구하려고 하였음. 힌트참고.

  1. 2019
function solution(answers) {
    var answer = [];
    var lengthOfAnswers = answers.length;
    var answer1 = [];
    var answer2 = [];
    var answer3 = [];
    var count1 =0;
    var count2 =0;
    var count3 =0;
    var findMax =[];
    
//일단 answers의 수만큼 각 수포자의 정답 배열설정 
    for(var i=1; i<=lengthOfAnswers; i++){
      if((i%5)!==0){
        answer1[i-1] = (i % 5); 
      } else{
        answer1[i-1] = 5; 
      }
    }
  
   for(var j=0; j<lengthOfAnswers; j++){
     if((j%8) === 1 ){
       answer2[j] = 1; 
     }else if((j%8) === 3 ){
       answer2[j] = 3; 
     }else if((j%8) === 5 ){
       answer2[j] = 4; 
     }else if((j%8) === 7 ){
       answer2[j] = 5; 
     }else{
       answer2[j] = 2; 
     } 
    }
  
  for(var x=0; x<lengthOfAnswers; x++){
    if(((x%10) === 0) ||((x%10) === 1)){
      answer3[x] = 3;
    } else if(((x%10) === 2) ||((x%10) === 3)){
       answer3[x] = 1;
    } else if(((x%10) === 4) ||((x%10) === 5)){
       answer3[x] = 2;
    } else if(((x%10) === 6) ||((x%10) === 7)){
       answer3[x] = 4;
    } else {
       answer3[x] = 5;
    }
  }    
   
//정답개수 도출
  for( var y=0; y<lengthOfAnswers; y++){
    if(answers[y] === answer1[y]){
      count1 = count1 +1;
    } 
    if(answers[y] === answer2[y]){
      count2 = count2 +1;
    }
    if(answers[y] === answer3[y]){
      count3 = count3 +1;
    } 
  }

//index 1,2,3기준으로 정답개수 배열에 넣기
  findMax=[count1, count2, count3];
  var max = Math.max(...findMax);
   
  for(var z=0; z<3; z++){
    if( findMax[z]===max){
      answer.push(z+1);
    }
  } 
    
    return answer;
}

풀이과정 문제점

정답 배열을 왜 이렇게 복잡하게 도출했지?

참고

#완전탐색

profile
happy

0개의 댓글