곽로그

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

알고리즘/프로그래머스

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

일도이동 2020. 8. 19. 00:20
반응형

 

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

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 ��

programmers.co.kr

 

import java.util.ArrayList;
import java.util.Collections;
class Solution {
    public int[] solution(int[] answers) {
        int[] answer = new int[3];

        int[] oneOriginal = {1, 2, 3, 4, 5};
        int[] twoOriginal = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] threeOriginal = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        int index1 = 0;
        int index2 = 0;
        int index3 = 0;

        int count1 = 0;
        int count2 = 0;
        int count3 = 0;

        for (int i = 0; i < answers.length; i++) {
            if (index1 % oneOriginal.length == 0) {
                index1 = 0;
            }
            if (answers[i] == oneOriginal[index1]) {
                count1++;
            }
            ++index1;

            if (index2 % twoOriginal.length == 0) {
                index2 = 0;
            }
            if (answers[i] == twoOriginal[index2]) {
                count2++;
            }
            ++index2;

            if (index3 % threeOriginal.length == 0) {
                index3 = 0;
            }
            if (answers[i] == threeOriginal[index3]) {
                ++count3;
            }
            ++index3;
        }

        int max = Math.max(count1,Math.max(count2,count3));
        ArrayList<Integer> maxList =new ArrayList<Integer>();
        if(max==count1){
            maxList.add(1);
        }
        if(max==count2){
            maxList.add(2);
        }
        if(max==count3){
            maxList.add(3);
        }

        answer=new int[maxList.size()];
        for(int i= 0;i<maxList.size();i++){
            answer[i]=maxList.get(i);
        }
        return answer;
    }
}

 

위의 코드도 통과되기는 하지만 

if (index1 % oneOriginal.length == 0) {
    index1 = 0;
 }
 if (answers[i] == oneOriginal[index1]) {
     count1++;
 }
 ++index1;

부분을 나머지를 이용해서 더 간단하게 바꿀 수 있다. 

 

 

import java.util.ArrayList;
import java.util.Collections;
class Solution {
    public int[] solution(int[] answers) {
        int[] answer = new int[3];

        int[] oneOriginal = {1, 2, 3, 4, 5};
        int[] twoOriginal = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] threeOriginal = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};


        int count1 = 0;
        int count2 = 0;
        int count3 = 0;

        for (int i = 0; i < answers.length; i++) {
            if(answers[i]==oneOriginal[i%oneOriginal.length]){
                count1++;
            }
            if(answers[i]==twoOriginal[i%twoOriginal.length]){
                count2++;
            }
            if(answers[i]==threeOriginal[i%threeOriginal.length]){
                count3++;
            }
        }

        int max = Math.max(count1,Math.max(count2,count3));
        ArrayList<Integer> maxList =new ArrayList<Integer>();
        if(max==count1){
            maxList.add(1);
        }
        if(max==count2){
            maxList.add(2);
        }
        if(max==count3){
            maxList.add(3);
        }

        answer=new int[maxList.size()];
        for(int i= 0;i<maxList.size();i++){
            answer[i]=maxList.get(i);
        }
        return answer;
    }
}
반응형
Comments