알고리즘/JAVA

[JAVA] 모의고사 - 프로그래머스

야아옹 2020. 10. 20. 23:23

문제 : 문제 : 모의고사를 치르는데 수포자 3명이 각자의 동일한 방법으로 문제를 찍을 시

        가장 많이 맞추는 사람 을 Return 하며, 만일 같을 시 오름차순으로 Return

 

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

 

풀이 : C# 에선 Dictionary 를 Toarray 로 Linq 를 쓸수 있었지만 Java 에서는 찾아도 나오지않아서.. 

        hashMap 에서 Value 를 기준으로 정렬하는 것을 진행 함.

package com.company;

import java.util.*;

public class PracticeTest {
    static int[] answers = {1,3,2,4,2};

    public static void main(String[] args) {
        for (int item: solution(answers))
        {
            System.out.println(item);
        }
    }
    static int[] solution(int[] answers)
    {
        List<Integer> answer = new ArrayList<>();
        HashMap<Integer, Integer> _map = new HashMap<>();

        Queue<Integer> q = new LinkedList<>();
        for (int i= 0; i < answers.length; i++)
            q.offer(answers[i]);

        Queue<Integer> q_first = new LinkedList<Integer>(Arrays.asList(1,2,3,4,5));
        Queue<Integer> q_second = new LinkedList<Integer>(Arrays.asList( 2, 1, 2, 3, 2, 4, 2, 5));
        Queue<Integer> q_third = new LinkedList<Integer>(Arrays.asList( 3, 3, 1, 1, 2, 2, 4, 4, 5, 5));

        int F_Point = 0;
        int S_Point = 0;
        int T_Point = 0;

        do {
            int nowAnswer = q.poll();
            int f_Answer = q_first.poll();
            int s_Answer = q_second.poll();
            int t_Answer = q_third.poll();

            if (nowAnswer == f_Answer)
                F_Point++;
            if (nowAnswer == s_Answer)
                S_Point++;
            if (nowAnswer == t_Answer)
                T_Point++;

            q_first.offer(f_Answer);
            q_second.offer(s_Answer);
            q_third.offer(t_Answer);

        }while(q.stream().count() > 0);

        _map.put(1,F_Point);
        _map.put(2,S_Point);
        _map.put(3,T_Point);

        List<Integer> KeySetList = new ArrayList<>(_map.keySet());
        KeySetList.sort((x,y) -> _map.get(y).compareTo(_map.get(x)));

        int MaxCount = _map.get(KeySetList.get(0));

        for (Integer i : KeySetList)
        {
            if (MaxCount == _map.get(i))
            {
                answer.add(i);
            }
        }
        return answer.stream().mapToInt(Integer::intValue).toArray();

    }
}