알고리즘/C#

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

야아옹 2020. 10. 3. 15:02

문제 : 모의고사를 치르는데 수포자 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, ...

 

제한

  • 시험은 최대 10,000 문제로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

 

풀이 - Queue.......ㅎ

 public static int[] solution(int[] answers)
        {
            List<int> answer = new List<int>();
            Dictionary<int, int> dic = new Dictionary<int, int>();

            Queue<int> q = new Queue<int>(answers);
            Queue<int> q_first = new Queue<int>(new int[] { 1, 2, 3, 4, 5 });
            Queue<int> q_second = new Queue<int>(new int[] { 2, 1, 2, 3, 2, 4, 2, 5 });
            Queue<int> q_third = new Queue<int>(new int[] { 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.Dequeue();
                int f_Answer = q_first.Dequeue();
                int s_Answer = q_second.Dequeue();
                int t_Answer = q_third.Dequeue();

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


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


            } while (q.Count > 0);

            dic.Add(1,F_Point);
            dic.Add(2,S_Point);
            dic.Add(3,T_Point);

            var descList = dic.ToArray().OrderByDescending(x => x.Value);
            int nowValue = descList.First().Value;

            foreach (var item in descList)
            {
                if (nowValue == item.Value)
                    answer.Add(item.Key);
            }
         
            answer.Sort();
            return answer.ToArray();
        }