[BAEKJOON] 백준 11728: 배열 합치기 (C#)

2024. 8. 7. 09:58IT/BaekJoon

문제 링크

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

 

 

문제

정렬되어있는 두 배열 A와 B가 주어진다. 두 배열을 합친 다음 정렬해서 출력하는 프로그램을 작성하시오.

 

 

입력

첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000)

둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거나 같은 정수이다.

 

 

출력

첫째 줄에 두 배열을 합친 후 정렬한 결과를 출력한다.

 

 

 

통과한 답안

using System.Text;

namespace _11728
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string[] inputs = Console.ReadLine().Split(' ');
            int N = int.Parse(inputs[0]);
            int M = int.Parse(inputs[1]);
            StringBuilder sb = new StringBuilder();

            int[] arrN = new int[N];
            int[] arrM = new int[M];
            arrN = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
            arrM = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();

            int[] arrSum = new int[N + M];
            Array.Copy(arrN, arrSum, N);
            Array.Copy(arrM, 0, arrSum, N, M);
            Array.Sort(arrSum);

            foreach (int i in arrSum)
            {
                sb.Append(i + " ");
            }

            Console.WriteLine(sb.ToString().TrimEnd());
        }
    }
}

 

두 개의 배열이 주어졌을 때, 두 배열을 합친 후에 정렬하여 출력하는 문제이다.

 

풀이에 사용한 방법은 C#의 Array 메서드를 이용한 방법인데,

크기가 N인 배열 arrN과 크기가 M인 배열 arrM을 미리 선언한 후에 입력값들을 받은 후에

이 둘을 합치려는 배열 arrSum(크기가 N + M)을 선언하고

(0 ~ N - 1) 범위에는 arrN을 Copy하고, (N ~ N + M - 1) 범위에는 arrM을 Copy하였다.

이후에 이를 정렬한 후에 StringBuilder를 이용하여 하나의 문자열로 만든 후에 출력하도록 구현하였다.

 

이 문제를 풀이하면서 C#의 Array 메서드들을 공부할 수 있었는데

만약 두 배열에서 중복되는 값이 있다면 하나만 취하는 경우에는

Union(합집합)이라는 메서드를 이용할 수 있었을 것을 알 수 있었다.