1 분 소요

모의고사

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

(사용언어 : java)

import java.util.*;

public class MockExam {
    /**
     * 1. 수포자 1,2,3의 답 찍는 패턴을 반복문을 써서 1차원 int배열로 담아낸다.
     * 2. answers의 정답과 수포자들의 답을 비교해서 맞는 경우에만 수포자 1,2,3의 정답 수를 각각 계산한다.
     * 3. 정답 수를 서로 비교하여 최다득점자를 오름차순으로 출력한다.
     */

    public static void main(String[] args) {
        MockExam mE = new MockExam();
        int[] answers = {1,3,2,4,2};
        // 반환타입이 배열이므로, 배열의 원소를 다 출력하기 위해 Arrays.toString() 사용
        System.out.println(Arrays.toString(mE.solution(answers)));
    }

    public int[] solution(int[] answers) {
        // 1. 수포자 1,2,3의 답안지를 각각 mathHaterA,B,C라는 int배열로 정의
        int[] mathHaterA = new int[answers.length];
        int[] mathHaterB = new int[answers.length];
        int[] mathHaterC = new int[answers.length];
        // 2. 문제의 조건대로 mathHaterA,B,C의 답을 생성해서 배열에 입력
        for(int i=0; i<mathHaterA.length; i++) {
            if(i%5==0) mathHaterA[i] = 1;
            if(i%5==1) mathHaterA[i] = 2;
            if(i%5==2) mathHaterA[i] = 3;
            if(i%5==3) mathHaterA[i] = 4;
            if(i%5==4) mathHaterA[i] = 5;
        }
        for(int i=0; i<mathHaterB.length; i++) {
            if(i%2==0) mathHaterB[i] = 2;
            if(i%8==1) mathHaterB[i] = 1;
            if(i%8==3) mathHaterB[i] = 3;
            if(i%8==5) mathHaterB[i] = 4;
            if(i%8==7) mathHaterB[i] = 5;
        }
        for(int i=0; i<mathHaterC.length; i++) {
            if(i%10==0 || i%10==1) mathHaterC[i] = 3;
            if(i%10==2 || i%10==3) mathHaterC[i] = 1;
            if(i%10==4 || i%10==5) mathHaterC[i] = 2;
            if(i%10==6 || i%10==7) mathHaterC[i] = 4;
            if(i%10==8 || i%10==9) mathHaterC[i] = 5;
        }
        // 3. 수포자1,2,3의 정답 갯수를 countA,B,C로 정의. answers[] 길이만큼 반복문을 돌려
        //  수포자들의 답이 정답일 때 countA,B,C를 1씩 증가시킴.
        int countA = 0, countB = 0, countC = 0;
        for(int i=0; i<answers.length; i++) {
            if(mathHaterA[i]==answers[i]) countA++;
            if(mathHaterB[i]==answers[i]) countB++;
            if(mathHaterC[i]==answers[i]) countC++;
        }
        // 4. 최다득점자를 담을 int배열 answer를 일단 빈 배열로 초기화.
        //  최다득점자의 수에 따라 answer[]의 길이를 설정 후, answer[]에 최다득점자를 원소로써 입력한다. (배열의 인덱스가 작을수록 수포자 번호가 작은 순서대로 입력)
        int[] answer = {};
        if(countA>countB && countA>countC) {
            answer = new int[1];
            answer[0] = 1;
        } else if(countB>countA && countB>countC) {
            answer = new int[1];
            answer[0] = 2;
        } else if(countC>countA && countC>countB) {
            answer = new int[1];
            answer[0] = 3;
        } else if(countA>countC && countA==countB) {
            answer = new int[2];
            answer[0] = 1; answer[1] = 2;
        } else if(countA>countB && countA==countC) {
            answer = new int[2];
            answer[0] = 1; answer[1] = 3;
        } else if(countB>countA && countB==countC) {
            answer = new int[2];
            answer[0] = 2; answer[1] = 3;
        } else if(countA==countB && countA==countC) {
            answer = new int[3];
            answer[0] = 1; answer[1] = 2; answer[2] = 3;
        }

        return answer;
    }
}

구현하기 했지만 코드가 너무 길다… 더 짧고 효과적으로 구현한다면 향후 추가 예정.

댓글남기기