하루 한 접시

[백준]1920번: 수 찾기 [C#]

NaZZU 2024. 3. 19. 23:39

첫째 줄에는 입력을 몇 개 받을 것인지(배열의 크기를 정함)

둘째 줄에는 입력이 문자열 형식으로 한 줄로 주어졌다.

셋째, 넷째 줄도 동일하게 주어진다.

정수는 최대 100,000개 가 주어질 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
using System.Text;
 
namespace 연습장
{
    internal class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder(); // 빠른 출력을 위한 StringBuild 클래스 선언
            int N = int.Parse(Console.ReadLine());
 
            string[] num = Console.ReadLine().Trim().Split();
            int[] numArr = new int[N];
 
            for (int i = 0; i < N; i++)
                numArr[i] = int.Parse(num[i]); // 이진 탐색을 위한 형 변환
           Array.Sort(numArr); // 이진 탐색을 위한 오름차순 정렬
 
            int M = int.Parse(Console.ReadLine());
 
            string[] search = Console.ReadLine().Trim().Split();
 
            for(int j = 0; j < M; j++)
            {
                int low = 0;
                int high = numArr.Length - 1;
                bool found = false;
                while(high >= low && !found)
                {
                    int mid = (low + high) / 2;
                    if (numArr[mid] == int.Parse(search[j]))
                    {
                        found = true;
                        break;
                    }
                    else if (numArr[mid] > int.Parse(search[j]))
                        high = mid - 1;
                    else low = mid + 1;
                }
                sb.Append(found ? "1\n" : "0\n"); // found 값에 따라 1과 0으로 sb에 넣음
            }
            Console.WriteLine(sb);
            
        }
    }
}
 
cs

첫번째 배열은 이진 탐색을 하기 위하여 int형으로 변환 후 오름차순으로 정렬했다.

이진 탐색으로 값을 찾아 sb(StringBuilder 인스턴스) 에 Append 후 출력해줬다.

역시 주어진 시간이 1초로 짧기 때문에 StringBuilder의 사용이 필수적인 것 같다.