[BAEKJOON] 백준 1015: 수열 정렬 (C#)

2024. 5. 25. 18:33IT/BaekJoon

문제 링크

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

 

 

문제

P[0], P[1], ...., P[N-1]은 0부터 N-1까지(포함)의 수를 한 번씩 포함하고 있는 수열이다. 수열 P를 길이가 N인 배열 A에 적용하면 길이가 N인 배열 B가 된다. 적용하는 방법은 B[P[i]] = A[i]이다.

배열 A가 주어졌을 때, 수열 P를 적용한 결과가 비내림차순이 되는 수열을 찾는 프로그램을 작성하시오. 비내림차순이란, 각각의 원소가 바로 앞에 있는 원소보다 크거나 같을 경우를 말한다. 만약 그러한 수열이 여러개라면 사전순으로 앞서는 것을 출력한다.

 

 

입력

첫째 줄에 배열 A의 크기 N이 주어진다. 둘째 줄에는 배열 A의 원소가 0번부터 차례대로 주어진다. N은 50보다 작거나 같은 자연수이고, 배열의 원소는 1,000보다 작거나 같은 자연수이다.

 

 

출력

첫째 줄에 비내림차순으로 만드는 수열 P를 출력한다.

 

 

 

통과한 답안

namespace _1015
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int N = int.Parse(Console.ReadLine());
            int[] A = new int[N];

            string[] inputs = Console.ReadLine().Split(' ');
            for (int i = 0; i < N; i++)
            {
                A[i] = int.Parse(inputs[i]);
            }

            var indexedA = A.Select((value, index) => new {Value = value, Index = index})
                            .OrderBy(pair => pair.Value)
                            .ToList();

            int[] P = new int[N];
            for (int i = 0; i < N; i++)
            {
                P[indexedA[i].Index] = i;
            }

            Console.WriteLine(string.Join(" ", P));
        }
    }
}

 

주어진 배열 A에 대해 수열 P를 찾아서

배열 B가 비내림차순으로 되도록 하는 방법을 구현하는 문제이다.

 

배열 A의 각 원소의 인덱스와 값을 쌍으로 묶고

그 쌍을 값 기준으로 정렬하고

정렬된 순서대로 인덱스를 추출하여 P를 구성하는 것으로 해결할 수 있다.

 

indexedA를 선언한 후에 Linq를 이용하여

A의 value와 index를 가져온 후에 그것을 가지고 새로운

value, index 페어를 만든 후에 이를 value 순으로 정렬한다.

 

이후에 인덱스 부분을 추출하여 P라는 배열을 만들어서 해결했다.