[코딩테스트][프로그래머스] 모의고사

김상욱·2024년 6월 24일

문제

https://school.programmers.co.kr/learn/courses/30/lessons/42840?language=java

JAVA 풀이

import java.util.*;

class Solution {
    public int[] solution(int[] answers) {
        ArrayList<Integer> answer = new ArrayList<>();
        int[] a_input={1,2,3,4,5};
        int[] b_input={2,1,2,3,2,4,2,5};
        int[] c_input={3,3,1,1,2,2,4,4,5,5};
        int[] score={0,0,0};
        
        for(int i=0;i<answers.length;i++){
            if(a_input[i%a_input.length]==answers[i]){
                score[0]++;
            }
            if(b_input[i%b_input.length]==answers[i]){
                score[1]++;
            }
            if(c_input[i%c_input.length]==answers[i]){
                score[2]++;
            }
        }
        
        // int max_value=0;
        // for(int i=0;i<3;i++){
        //     if(max_value<score[i]){
        //         answer=new ArrayList<>();
        //         max_value=score[i];
        //         answer.add(i+1);
        //     }else if(max_value==score[i]){
        //         answer.add(i+1);
        //     }
        // }
        int max_value=Arrays.stream(score).max().getAsInt();
        for(int i=0;i<3;i++){
            if(max_value==score[i]){
                answer.add(i+1);
            }
        }
        
        return answer.stream().mapToInt(Integer::intValue).toArray();
    }
}

내 생각

  • 처음에는 자바에서도 max를 배열에서 바로 사용할 수 있다는 것을 모르고 배열을 매번 초기화해서 구하는 방법을 사용하였다. 하지만 이 방법은 배열을 매번 생성해서 넣는거라 비효율적이라 생각해서 최댓값을 먼저 구해서 같은 점수를 가지는 사람을 정답에 넣는 방법을 사용하였다.
  • 풀이 시간 : 12분

Python 풀이

def solution(answers):
    answer = []
    a=[1,2,3,4,5]
    b=[2,1,2,3,2,4,2,5]
    c=[3,3,1,1,2,2,4,4,5,5]
    method=[a,b,c]
    score=[0,0,0]
    for i in range(len(answers)):
        for j in range(3):
            if answers[i]==method[j][i%len(method[j])]:
                score[j]+=1
    max_value=max(score)
    for i in range(len(score)):
        if score[i]==max_value:
            answer.append(i+1)
    return answer

내 생각

  • 정답을 찍는 패턴을 배열로 저장해놓고 각 주어진 정답에 따라 제출되는 정답과 이중 포문으로 확인해주었다. 이 때, 나머지 연산을 사용해서 해당 패턴을 넘어가도 순서대로 정답을 채점하게 할 수 있다. 그 후, 점수의 최대값을 구해서 비교해주면 된다.
  • 풀이 시간 : 10분

0개의 댓글