티스토리 뷰

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

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 ��

programmers.co.kr

 

[풀이 과정]

 

1. answers의 최대 크기는 10,000 이므로 O(N)으로 충분히 가능하다.

2. one, two, three는 문제에서 주어진다.

3. one, two, three가 맞춘 정답의 수를 scores에 담는다.

4. 가장 많이 맞춘 사람을 찾는다.

 

[소스 코드]

 

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

public class MockExam {
    public static void main(String[] args) {
        int[] answers = {1, 3, 2, 4, 2};

        System.out.println(Arrays.toString(solution(answers)));
    }

    private static int[] solution(int[] answers) {
        List<Integer> results = new ArrayList<>();

        int[] one = {1, 2, 3, 4, 5};
        int[] two = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] three = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        int[] scores = new int[3];

        for (int i = 0; i < answers.length; i++) {
            int answer = answers[i];

            if (one[i % one.length] == answer) {
                scores[0] += 1;
            }

            if (two[i % two.length] == answer) {
                scores[1] += 1;
            }

            if (three[i % three.length] == answer) {
                scores[2] += 1;
            }
        }

        int max = Math.max(scores[0], Math.max(scores[1], scores[2]));

        for (int i = 0; i < scores.length; i++) {
            if (max == scores[i]) {
                results.add(i + 1);
            }
        }

        int[] answer = new int[results.size()];

        for (int i = 0; i < answer.length; i++) {
            answer[i] = results.get(i);
        }

        return answer;
    }
}

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
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
글 보관함