[프로그래머스] 모의고사

2020. 6. 17. 20:38프로그래머스/LEVEL 1

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
        int[] answer = {};
        List<Integer> answerList = new ArrayList<>();
        
        int[] person1 = {1,2,3,4,5};
        int[] person2 = {2,1,2,3,2,4,2,5};
        int[] person3 = {3,3,1,1,2,2,4,4,5,5};
        
        int[] rank = new int[4];
        int bestCorrect =0;
        
        for(int i=0; i<answers.length; i++){
            if(answers[i]==person1[i%5]){
                rank[1]++;
            }
            if(answers[i]==person2[i%8]){
                rank[2]++;
            }
            if(answers[i]==person3[i%10]){
                rank[3]++;
            }
        }
        
        for(int i=1; i<rank.length; i++){
            bestCorrect = Math.max(rank[i],bestCorrect);
        }
        
        for(int i=1; i<rank.length; i++){
            if(rank[i]==bestCorrect){
                answerList.add(i);
            }
        }
                
        answer = new int[answerList.size()];
        
        for(int i=0; i<answerList.size(); i++){
            answer[i] = answerList.get(i);
        }
        
        
        return answer;
    }
}

1. 각 사람의 찍는 패턴배열을 만든다.

2. answers를 돌면서 각 사람이 몇개를 맞추었는지 rank에 기록한다.

3. rank중 가장 큰 값을 찾아 bestCorrect로 지정한다. (rank를 정렬시켜서 구한다면 person 번호를 지칭하는 인덱스가 흐트러지므로 Math.max를 이용해 변수에 담았다.)

4. 다시 rank를 돌면서 bestCorrect와 같은 값을 가진 person의 index를 answerList에 넣는다.

5. answer에 answerList값들을 옮긴다. 

 

----------------------------------------------------------------------------------------------------------------------------

자바스크립트

function solution(answers) {
    var answer = [];
    let count=[0,0,0];
    
    const first = [1,2,3,4,5];
    const second = [2,1,2,3,2,4,2,5];
    const third = [3,3,1,1,2,2,4,4,5,5];
    
    for (var i=0; i<answers.length; i++){
        if (answers[i] === first[i%first.length]){
            count[0]++;
        }
        if (answers[i] === second[i%second.length]){
            count[1]++;
        }
        if (answers[i] === third[i%third.length]){
            count[2]++;
        }
    }
    
    const target = Math.max(count[0],count[1],count[2]);
    
    for (var i=0; i<count.length; i++){
        if(count[i]===target){    
            answer.push(i+1);
        }
    }
    
    return answer;
}

1. 정답 배열을 만들고 답을 비교하는 방식은 자바때와 같다.

2. Math.max를 통해 2개보다 많은 수를 한번에 비교할 수 있다. (자바는 두개만 비교 가능)