코딩테스트/프로그래머스

[프로그래머스 Lv.1] 모의고사 .java

머밍 2024. 8. 10. 21:00

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

문제 분석

패턴 2차원배열

  • 정답 패턴 길이 <= 문제 수: 문제 수만큼 검사하기
  • 정답 패턴 길이 > 문제 수: 남은 정답을 다시 패턴의 처음부터 비교해야함

가장 높은 점수를 획득한 수포자의 번호를 오름차순으로 구하기

-> 최댓값을 먼저 구하고 이 점수와 일치하는 수포자의 번호 리스트에 저장 

 

 

 

 

 

 

 

import java.util.ArrayList;
import java.util.Arrays;

class Solution {
    public int[] solution(int[] answers) {
        int[][] pat = {
                {1,2,3,4,5},
                {2,1,2,3,2,4,2,5},
                {3,3,1,1,2,2,4,4,5,5}
        };
        
        int[] score = new int[3];
        
        for(int i = 0; i < answers.length; i++) {
            for(int j = 0; j < 3; j++){
                if(answers[i] == pat[j][i % pat[j].length]){
                    score[j]++;
                }
            }
        }
        
        int max = Arrays.stream(score).max().getAsInt(); //최댓값 찾기
		
        ArrayList<Integer> list = new ArrayList<>();
        
        //가장 높은 점수를 가진 수포자들의 번호를 찾아 리스트에 담기
        for(int i = 0; i < score.length; i++) {
            if(score[i] == max){
                list.add(i+1);
            }
        }
        
        return list.stream().mapToInt(i -> i).toArray();//리스트를 배열로
    }
}