최대 1 분 소요

문제 링크

풀이 과정

  1. 시간 제한이 핵심인 문제이다.
  2. 입출력을 Stream객체를 통해 구현하여 시간을 절약한다.
  3. 카드를 찾는 과정을 하나하나 비교하여 찾지말고 이진 트리를 사용하여 찾는다.

결과

internal class Program
{
    static void Main(string[] args)
    {
        StreamReader sr = new StreamReader(Console.OpenStandardInput());
        StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

        int N = int.Parse(sr.ReadLine());
        int[] havingCards = new int[N];
        havingCards = Array.ConvertAll(sr.ReadLine().Split(" "), int.Parse);
        
        Array.Sort(havingCards);

        int M = int.Parse(sr.ReadLine());
        int[] randomCards = new int[M];
        randomCards = Array.ConvertAll(sr.ReadLine().Split(" "), int.Parse);

        for (int i = 0; i < M; i++)
        {
            int first = 0;
            int end = havingCards.Length - 1;
            int num = randomCards[i];
            bool hasNum = false;

            while (first <= end)
            {
                int middle = (first + end) / 2;

                if (num == havingCards[middle])
                {
                    hasNum = true;
                    break;
                }
                else if(num > havingCards[middle])
                {
                    first = middle + 1;
                }
                else
                {
                    end = middle - 1;
                }
            }

            sw.Write(hasNum ? "1 " : "0 ");
        }

        sr.Close();
        sw.Close();
    }
}

댓글남기기