2024. 5. 25. 18:33ㆍIT/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라는 배열을 만들어서 해결했다.
'IT > BaekJoon' 카테고리의 다른 글
[BAEKJOON] 백준 1026: 기타줄 (C#) (0) | 2024.05.26 |
---|---|
[BAEKJOON] 백준 1026: 보물 (C#) (0) | 2024.05.26 |
[BAEKJOON] 백준 1439: 뒤집기 (C#) (0) | 2024.05.24 |
[BAEKJOON] 백준 1340: 연도 진행바 (C#) (0) | 2024.05.23 |
[BAEKJOON] 백준 1380: 귀걸이 (C#) (0) | 2024.05.22 |