본문 바로가기
코딩테스트 준비/백준 C#

C# - 1966 +) 풀이

by 코딩하는 돼징 2024. 3. 17.
반응형

기본 셋팅

01 Queue<Tuple<int,int>> 생성

Tuple의 첫번째 요소에는 index값 두번째 요소에는 중요도를 담는다.

Queue<Tuple<int,int>> queue = new Queue<Tuple<int,int>>();
int[] input = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);

for (int i = 0; i < N; i++)
{
    queue.Enqueue(new Tuple<int, int>(i, input[i]));
}

02 input.Sort()

중요도를 오름차순으로 정렬한다.

Array.Sort(input);

03 하나씩 꺼내기

Tuple<int,int> firstitem = queue.Dequeue();

주요 알고리즘

01 만약 firstitem이 현재의 제일 큰 중요도와 같을 경우 

현재 중요도는 그럼 dequeue됐으니까 다음번째로 큰 중요도를 비교시키기위해 num을 증가시킨다. 그리고 enqueue할 필요가 없으니까 continue되도록한다.

else if (firstitem.Item2.Equals(input[input.Length - 1 - num]))
{
    count++;
    num++;
    continue;
}

02  만약 firstitem이 현재의 제일 큰 중요도와 같고 Item1이 M과 같은 경우

count를 증가시키고 이 값을 출력시킨 다음 반복문에서 빠져나오도록한다.

if (firstitem.Item2.Equals(input[input.Length - 1 - num]) && firstitem.Item1 == M)
{
    count++;
    Console.WriteLine(count);
    break;
}

03 만약 firstItem이 현재의 제일 큰 중요도 중 제일 큰 애와 같지 않는 경우

다시 enqueue시켜 맨 뒤로 보낸다.

queue.Enqueue(firstitem);

코드 전문

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace baek2
{
    class Program
    {
        public static void Main()
        {
            int n = int.Parse(Console.ReadLine());
            while (n > 0)
            {
                string[] token = Console.ReadLine().Split();
                int N = int.Parse(token[0]);
                int M = int.Parse(token[1]);

                Queue<Tuple<int,int>> queue = new Queue<Tuple<int,int>>();
                int[] input = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);

                for (int i = 0; i < N; i++)
                {
                    queue.Enqueue(new Tuple<int, int>(i, input[i]));
                }
                Array.Sort(input);
                int count = 0;
                int num = 0;
                while (true)
                {
                    Tuple<int,int> firstitem = queue.Dequeue();
                    if (firstitem.Item2.Equals(input[input.Length - 1 - num]) && firstitem.Item1 == M)
                    {
                        count++;
                        Console.WriteLine(count);
                        break;
                    }
                    else if (firstitem.Item2.Equals(input[input.Length - 1 - num]))
                    {
                        count++;
                        num++;
                        continue;
                    }
                    queue.Enqueue(firstitem);
                }
                n--;
            }
        }
    }
}

 

 

반응형

'코딩테스트 준비 > 백준 C#' 카테고리의 다른 글

백준 C# - 14425  (0) 2024.03.31
백준 C# - 2108 +) 풀이  (1) 2024.03.24
백준 C# - 11286 +) 눈물의 풀이  (2) 2024.03.17
백준 C# - 1235 +) 풀이  (0) 2024.03.13
백준 C# - 1987  (0) 2024.03.12

댓글