슬기로운슬기

문제

[완전탐색]

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}
        };
    
    public int[] solution(int[] answers) {
        // 수포자들의 찍기 규칙 배열
        // RULES[0]: 1번 수포자, RULES[1]: 2번 수포자, RULES[2]: 3번 수포자

        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 < 3; person++) {
                int index = problem % RULES[person].length; // 현재 문제에 대한 찍기 인덱스
                int picked = RULES[person][index]; // 현재 수포자가 찍은 정답
                if (picked == answer && ++corrects[person] > max) {
                    max = corrects[person]; // 가장 많이 맞힌 정답 개수 업데이트
                }
            }
        }
        final int maxCorrects = max; // 람다식에서 사용하기 위해 max를 final 변수로 저장
        
        // 최대 정답 개수를 가진 수포자들의 번호를 반환
        return IntStream.range(0, 3)
                .filter(i -> corrects[i] == maxCorrects)
                .map(i -> i + 1) // 인덱스(0-based)를 번호(1-based)로 변환
                .toArray();
    }
}
  • final int maxCorrects = max;
    • maxCorrects를 final로 선언
    • 람다 혹은 익명 메서드로 전달되는 메서드에서 외부 변수를 참조할 때는 해당 변수값을 수정하면 안됨
    • 따라서, final 키워드를 붙여 값이 수정되지 않는다는 것을 명시

IntStream

IntStream.range(0, 3) // 0부터 2까지의 정수 스트림을 생성
        .filter(i -> corrects[i] == maxCorrects) // 가장 많이 맞힌 정답 개수와 일치하는 수포자 필터링
        .map(i -> i + 1) // 인덱스(0-based)를 번호(1-based)로 변환
        .toArray(); // 배열로 변환하여 반환
  • IntStream.range(0,3): 0부터 2까지의 정수를 IntStream으로 생성 
  • filter(i -> corrects[i] == maxCorrects) : filter 연산 사용 
    • corrects 배열에서 maxCorrects와 같은 결과값을 가지는 i 필요
반응형
profile

슬기로운슬기

@스를기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!