본문 바로가기

PROGRAMMING/ALGORITHM

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

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

 

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

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

programmers.co.kr

 

풀이는 dp처럼 최대 문제수만큼 

수포자 3인방의 정답지를 만들어 놓고, 답지와 비교하는 방식으로

굳이 이렇게 안 풀어도 됐을 거 같긴 한데.. 

 

다른 분들 풀이를 보니 

찍는 방식 패턴을 반복 지점까지 배열로 선언해서 채점하는 방법을 썼다.

짧고 좋은 듯.

 

내 풀이

import java.util.ArrayList;

public class Solution {
    static int MAX = 10000;
    public int[] solution(int[] answers) {
        int[] apply1 = new int[MAX];
        int[] apply2 = new int[MAX];
        int[] apply3 = new int[MAX];
        int[] apply2Pattern = {1,3,4,5};
        int[] apply3Pattern = {3,1,2,4,5};
        int[] answer = {0,0,0};

        for(int i=0; i < MAX; i++){
            apply1[i] = (i%5)+1;
            if(i%2 ==0){
                apply2[i] = 2;
                apply3[i] = apply3Pattern[(i/2)%5];
            }else{
                int num2 = ((i-1)/2)%4;
                int num3 = ((i-1)/2)%5;
                apply2[i] = apply2Pattern[num2];
                apply3[i] = apply3Pattern[num3];
            }

        }
        for(int i=0; i<answers.length; i++){
            if(answers[i] == apply1[i]) answer[0]++;
            if(answers[i] == apply2[i]) answer[1]++;
            if(answers[i] == apply3[i]) answer[2]++;
        }

        int maxAnswerCnt = Math.max(Math.max(answer[0], answer[1]), answer[2]);
        ArrayList<Integer> resultArray = new ArrayList<>();
        for (int i=0; i < 3; i++){
            if(answer[i] == maxAnswerCnt) {
                resultArray.add(i+1);
            }
        }
        int[] result = new int[resultArray.size()];
        for(int i=0; i< resultArray.size(); i++){
            result[i] = resultArray.get(i);
        }
        return result;
    }
}

 

약간 시간을 잡아먹은 부분

배열은 size를 정해 줘야 하는데 동점자가 몇 명인지 알 수가 없어서 ArrayList에 동점자를 넣고

List를 또 배열로 변환해 주는 과정.

 

다른 사람의 정답을 보니 밑의 for문은

resultArray.stream().mapToInt(i->i.intValue()).toArray(); 

이렇게 바꿔 쓸 수 있다.