[Programmers] 모의고사(JS)

nRecode·2021년 1월 18일
0

Algorithm

목록 보기
29/48

문제

접근

  1. 1,2,3은 반복되는 패턴이 있음. answer의 length만큼 배열을 만들어준다.
  2. answer와 1,2,3번을 비교하는 방법 -> 각 인덱스끼리 같으면 count++;
  3. 1,2,3순서대로 조사
  4. [2,2,1]이 됐다면 Math.max후 이 수와 같은 값을 가진 인덱스+1을 answer에 push

풀이

function solution(answers) {

    var answer = [];
    let entire = [];
    var correct = [];
    let n = answers.length;
    
    
    function makeArr(iter){
        let arr = [];
        while(arr.length < n){
            arr.push(...iter);
        }
        entire.push(arr.slice(0, n));
    }
    
    makeArr([1,2,3,4,5]);
    makeArr([2,1,2,3,2,4,2,5]);
    makeArr([3,3,1,1,2,2,4,4,5,5]);
    
    for(let i of entire){
        let count = 0;
        for(let j = 0; j < n; j++){
            if(i[j] === answers[j]) count++;
        }
        correct.push(count)
    }
    
    let max = Math.max(...currect);
    for(let i = 0; i < currect.length; i++){
        if(currect[i] === max) answer.push(i + 1)
    }
    
    return answer;
}

우선 풀긴 했는데 진짜... 좋은 방법이 아닌듯... 일단 이중 for문을 썻다는 것이ㅜㅜ 일단 이중 for문을 사용한 것은 함수를 또 생성하여 변경은 할 수 있다. 다른사람이 푼 풀이에서 띠용했던 부분이 있었다...

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];

  // 굳이 길이 만큼 더해서 배열 만들지 않음, filter를 이용해서 일치하는 배열만 만들고 length를 바로 구해서 변수에 정답 수 만 할당...
    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);
	
    var correct = []
    correct.push(a1c, a2c, a3c);
    for(let i = 0; i < correct.length; i++){
        if(correct[i] === max) answer.push(i + 1)
    }


    return answer;
}
profile
안정성, 확장성 있는 서버를 구축하고 가꾸는 개발자를 목표로 공부하고 있습니다. 🤔🤔🤔🤔 부족하기에 맞지 않는 내용이 있을 수 있습니다. 가감없이 피드백 해주시면 정말 감사하겠습니다..🙏

0개의 댓글