SMALL

https://www.acmicpc.net/problem/1920

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net


  • 문제


  • 문제풀이

리스트를 활용하지 않고 이분탐색을 이용해야 시간초과가 되지 않는다.

 


  • 코드 1
using System;
using System.Text;
class Program
    {

		private static char Compare(int x, int y)
		{
			if (x > y)
				return '>';
			else if (x < y)
				return '<';
			else
				return '=';
		}
		private static int BinarySearch(int[] datas,int iPoint)
        {
			int right = datas.Length - 1;
			for (int left = 0; left <= right;)
			{
				int middle = (left + right) / 2;

				switch (Compare(iPoint, datas[middle]))
				{
					case '>': left = middle + 1; break;//x>datas[middle] 
					case '<': right = middle - 1; break;//x<datas[middle]
					case '=': return 1;
				}
			}
			return 0;
        }
		static void Main(string[] args)
		{
			StringBuilder sb = new StringBuilder();
			int N = int.Parse(Console.ReadLine());
			string[] input = Console.ReadLine().Split();
			int[] arr = new int[N];
			for (int i = 0; i < N; i++)
			{
				arr[i] = int.Parse(input[i]);
			}
			Array.Sort(arr);
			int M = int.Parse(Console.ReadLine());
			string[] arr2 = Console.ReadLine().Split();
			for (int i = 0; i < M; i++)
			{
				int check = int.Parse(arr2[i]);
				sb.Append(BinarySearch(arr, check) + "\n");
				
			}
			Console.WriteLine(sb);
		}
	}

 


  • 후기

점점 포인터가 많아진다 어렵다

LIST

+ Recent posts