Programmers - 완전탐색 > 모의고사

박재현·2021년 7월 10일
0

알고리즘 부수기

목록 보기
8/43
post-thumbnail

내 풀이

쉬운 문제이기 때문에 논리적인 풀이보다는 객체지향적인 풀이에 집중하였다.

  1. 각 수포자의 찍는 패턴을 간소화하여 switch문으로 return하는 함수를 만든다.
  2. 각 수포자의 찍는 패턴과 answer를 비교하여 answerCnt[i]++
function solution(answers) {
    let answerCnt = [0, 0, 0];
    let result = [];
    
    
    function firstPeople(index){
        return index % 5 + 1;
    }
    
    function secondPeople(index){
        if(index % 2 === 0) {
            return 2;
        }
        switch(index % 8){
            case 1:
                return 1;
            case 3:
                return 3;
            case 5:
                return 4;
            case 7:
                return 5;
        }
    }
    
    function thirdPeople(index){
        index %= 10;
        index = Math.floor(index/2);
        console.log(`index: ${index}`);
        switch(index){
            case 0:
                return 3;
            case 1:
                return 1;
            case 2:
                return 2;
            case 3:
                return 4;
            case 4:
                return 5;
        }
    }
    
    function findMax(cnt){
        let max = Math.max.apply(null, cnt);
        return max;
    }
    
    for(let i = 0; i < answers.length; i++) {
        if(answers[i] === firstPeople(i)){
            answerCnt[0]++;
        }
        if(answers[i] === secondPeople(i)){
            answerCnt[1]++;
        }
        if(answers[i] === thirdPeople(i)){
            answerCnt[2]++;
        }
        console.log(answers[i], thirdPeople(i));
    }
    console.log(answerCnt);
    for(let j = 0; j < answerCnt.length; j++){
        if(answerCnt[j] === findMax(answerCnt)){
            result.push(j+1);
        }
    }
        
    return result;
}

모범 답안

패턴을 배열 형태로 전부 저장하고 filter를 사용하여 각 수포자가 맞춘 정답 수를 측정하였다. 정답 수 중 가장 큰 값을 Math api를 통해 구하였다.

  1. 각 수포자의 맞춘 정답 수 측정
  2. 모든 수포자 중 가장 높은 정답 개수 max에 저장
  3. max와 수포자의 맞춘 정답수가 같으면 answer에 저장
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];
	
  	// 과정 1
    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;
  	// 과정 2
    var max = Math.max(a1c,a2c,a3c);

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


    return answer;
}

얻어갈 부분

  • array Api의 적절한 활용
profile
공동의 성장을 추구하는 개발자

0개의 댓글