첫째 줄에는 입력을 몇 개 받을 것인지(배열의 크기를 정함)
둘째 줄에는 입력이 문자열 형식으로 한 줄로 주어졌다.
셋째, 넷째 줄도 동일하게 주어진다.
정수는 최대 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의 사용이 필수적인 것 같다.
'하루 한 접시' 카테고리의 다른 글
[백준] 11399번: ATM [C#] (0) | 2024.03.21 |
---|---|
[백준] 1181번: 단어 정렬하기 [C#] (0) | 2024.03.20 |
[백준]9012번: 괄호 [C#] (0) | 2024.03.20 |
[백준]10989번: 수 정렬하기 3 [C#] (0) | 2024.03.20 |
[백준]2751번: 수 정렬하기 2 [C#] (0) | 2024.03.19 |