티스토리 뷰

프로그래머스 42840번 - 모의고사

프로그래머스 42840번 - https://programmers.co.kr/learn/courses/30/lessons/42840

 

요구사항

1. 수포자 삼인방 중 가장 많은 문제를 맞힌 사람이 누구인지 반환하라.

2. 1번 수포자는 1번, 2번, 3번, 4번, 5번 순으로 반복하여 답을 찍는다.

3. 2번 수포자는 2번, 1번, 2번, 3번, 2번, 4번, 2번, 5번 순으로 반복하여 답을 찍는다.

4. 3번 수포자는 3번, 3번, 1번, 1번, 1번, 2번, 2번, 4번, 4번, 5번, 5번 순으로 반복하여 답을 찍는다.

 

요구사항 분석 및  풀이과정

1. 각 수포자는 일정한 패턴으로 반복하여 답을 찍기때문에, 패턴의 길이와 나머지 연산을 통하여 i번째 찍는 답을 알아내면 된다.

2. 각 수포자가 맞힌 문제의 수를 구한 후 가장 많이 맞춘 사람을 반환한다.

 

소스코드 작성

import java.util.stream.IntStream;

class Solution {

    public int[] solution(int[] answers) {
        int[] first = { 1, 2, 3, 4, 5 };
        int[] second = { 2, 1, 2, 3, 2, 4, 2, 5 };
        int[] third = { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        
        int[] oks = new int[3];
        
        for(int i = 0; i < answers.length; i++) {
            oks[0] += (first[i % 5] == answers[i] ? 1 : 0);
            oks[1] += (second[i % 8] == answers[i] ? 1 : 0);
            oks[2] += (third[i % 10] == answers[i] ? 1 : 0);
        }
        
        int max = Math.max(Math.max(oks[0], oks[1]), oks[2]);
        return IntStream.range(0, 3).filter(i -> oks[i] == max).map(i -> i + 1).toArray();
    }
}

 

결과

 

소스코드 깃허브 주소

링크

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함