전체 글 (162)
2024-03-19 23:39:37

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

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

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

정수는 최대 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의 사용이 필수적인 것 같다.

2024-03-19 22:47:59

첫째 줄에 몇개를 입력 할 것인지 입력하고, 둘째부터 수를 정렬 할 수를 입력받는다.
입력된 수를 오름차순으로 정렬 한 후, 출력해주면 된다.

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
 
using System.Text;
 
namespace 연습장
{
    internal class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();
            int N = int.Parse(Console.ReadLine());
            int[] arr = new int[N];
 
            for(int i = 0; i < N; i++)
            {
                arr[i] = int.Parse(Console.ReadLine());
            }
            Array.Sort(arr);
 
            for(int j = 0; j < N; j++)
            {
                sb.Append(arr[j]+ "\n");
            }
            Console.WriteLine(sb);
        }
    }
}
 
cs

계속 시간 초과 오류가 나길래 왜 그런가 싶었는데, 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
[백준]1920번: 수 찾기 [C#]  (0) 2024.03.19