본문 바로가기
코딩테스트/programming_JAVA

[Java] 프로그래머스_42840 : 모의고사

by prometedor 2023. 11. 20.

완전탐색

모의고사 - Level 1

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

 

프로그래머스

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

programmers.co.kr

 

 

 

풀이

import java.util.stream.IntStream;

class Solution {
    
    private static final int[][] RULES = {
        { 1, 2, 3, 4, 5 },
        { 2, 1, 2, 3, 2, 4, 2, 5 },
        { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 }
    };
    
    private int getPicked(int person, int problem) {
        int[] rule = RULES[person];
        int idx = problem % rule.length; // 규칙보다 문제수가 많을 경우 규칙이 문제수에 도달했을 때 다시 idx를 0으로 보내주기 위함
        return rule[idx];
    }
    
    public int[] solution(int[] answers) {
        int[] corrects = new int[3]; // 정답 개수
        int max = 0;
        
        for (int problem = 0; problem < answers.length; problem++) {
            int answer = answers[problem];
            
            for (int person = 0; person < RULES.length; person++) {
                int picked = getPicked(person, problem);
                if (answer == picked) {
                    if (++corrects[person] > max) {
                        max = corrects[person];
                    }
                }
            }
        }
        
        final int maxCorrects = max;
        return IntStream.range(0, 3) // 0~2까지의 정수 스트림 생성(수포자 3명)
                .filter(i -> corrects[i] == maxCorrects) // 조건에 만족하는 요소만 필터링
                .map(i -> i + 1) // 필터링된 인덱스에 1을 더하여 1부터 시작하는 수포자 번호로 매핑(배열은 0부터 시작하므로)
                .toArray(); // 스트림의 요소들을 배열로 변환하여 반환
        
    }
}

 

 

IntStream 이용하기 (java.util.stream.IntStream)

ㄴ IntStream은 기본적인 int 값을 스트림 형태로 다룰 수 있게 해주는 Java 스트림이다.

 

  1. filter:
    • 기능: 주어진 조건에 따라 요소를 필터링합니다.
    • 인자: predicate는 조건을 나타내는 함수형 인터페이스로, true를 반환하는 요소만 유지합니다.
  2. map:
    • 기능: 각 요소를 특정 함수에 따라 변환합니다.
    • 인자: mapper는 각 요소에 대해 적용되는 함수로, 각 요소를 변환한 값을 반환합니다.
  3. toArray:
    • 기능: 스트림의 요소를 배열로 변환합니다.
    • 반환값: 변환된 배열