본문 바로가기
정리/알고리즘

완전탐색 - 모의고사

by Hudini30 2022. 2. 17.

프로그래머스 (완전탐색) - 모의고사

해당 문제에서는 수포자의 패턴을 확인하여 패턴 배열을 가진 Giver를 생성해 answers 전체를 돌면서 정답수를 counting 해주었고, 이후 정답수 기준의 우선순위 큐에 넣은 후 빼내면서 정답수가 동일할 경우 가장많은 문제를 맞힌 사람의 id를 저장하는 리스트에 넣었습니다. 앞의 동작을 완료 후 정렬하여 primitive type 배열로 변경하여 리턴해주었습니다. 큐에 순서대로 넣기 때문에 마지막에 정렬을 할 필요는 없어 보이기는 하지만 문제대로 여러명일 경우 오름차순 정렬 하라는 요구사항이 있기 때문에 명시적으로 넣어 주도록 하였습니다.

public int[] solution(int[] answers) {
        List<Integer> firstRankerIds = new ArrayList<>();

        Giver giver1 = new Giver(new int[]{1,2,3,4,5}, 1);
        Giver giver2 = new Giver(new int[]{2,1,2,3,2,4,2,5}, 2);
        Giver giver3 = new Giver(new int[]{3,3,1,1,2,2,4,4,5,5}, 3);

        for (int i = 0; i < answers.length; i++) {
            giver1.grade(i, answers[i]);
            giver2.grade(i, answers[i]);
            giver3.grade(i, answers[i]);
        }

        PriorityQueue<Giver> rankingQueue = new PriorityQueue<>(Comparator.comparingInt(Giver::getCorrectCount).reversed());

        rankingQueue.add(giver1);
        rankingQueue.add(giver2);
        rankingQueue.add(giver3);

        int maxCorrectCount = 0;

        do {
            Giver giver = rankingQueue.poll();
            maxCorrectCount = giver.getCorrectCount();
            firstRankerIds.add(giver.getId());

        } while (!rankingQueue.isEmpty() && rankingQueue.peek().getCorrectCount() == maxCorrectCount);

        firstRankerIds.sort(Integer::compareTo);

        return firstRankerIds.stream().mapToInt(Integer::intValue).toArray();
    }

    private class Giver {
        private final int[] pattern;
        private final int id;
        private int correctCount;

        public Giver(int[] pattern, int id) {
            this.pattern = pattern;
            this.id = id;
        }
        int getId() {
            return this.id;
        }
        void grade(int problemNumber, int answer) {
            if (pattern[problemNumber % pattern.length] == answer) {
                this.correctCount++;
            }
        }

        int getCorrectCount() {
            return correctCount;
        }
    }

'정리 > 알고리즘' 카테고리의 다른 글

완전탐색 - 카펫  (0) 2022.02.21
완전탐색 - 소수찾기  (0) 2022.02.19
정렬 - H-Index  (0) 2022.02.16
정렬-가장 큰 수  (0) 2022.02.15
정렬-K번째 수  (0) 2022.02.14

댓글