안녕하세요, 코딩테스트를 준비하는 여러분! 오늘은 배열에서 K번째 수를 찾는 문제에 대해 다뤄보겠습니다. 이 문제는 특히 코딩테스트에서 자주 나오는 유형 중 하나로, 배열과 정렬의 개념을 이해하는 데 큰 도움이 됩니다. 본문에서는 문제를 상세히 설명하고, C#으로 해결하는 방법을 단계별로 알아보겠습니다.
문제 설명
주어진 배열에서 K번째로 큰 수를 찾는 문제가 있습니다. 배열은 정수로 이루어져 있으며, K는 1부터 시작하는 인덱스입니다. 객체가 크기 순으로 정렬된다고 가정합니다. 예를 들어, 배열이 [3, 1, 2, 4, 5]이고 K가 2라면, 2번째로 큰 수는 4입니다.
입력
- 첫 번째 줄에는 배열의 크기 N (1 ≤ N ≤ 1000)이 주어집니다.
- 두 번째 줄에는 N개의 정수가 주어집니다. (각 정수는 -10000 ≤ x ≤ 10000)
- 세 번째 줄에는 정수 K가 주어집니다. (1 ≤ K ≤ N)
출력
K번째로 큰 수를 출력합니다.
예제 입력
5 3 1 2 4 5 2
예제 출력
4
문제 접근 방법
이 문제를 해결하기 위해서는 다음과 같은 단계를 따라 진행할 수 있습니다:
- 주어진 배열을 정렬합니다.
- 정렬된 배열에서 K번째로 큰 수를 찾아봅니다.
1단계: 배열 정렬하기
배열을 정렬하는 방법에는 여러 가지가 있지만, C#에서 기본적으로 제공하는 Array.Sort()
메서드를 사용할 수 있습니다. 이 메서드는 기본적으로 오름차순으로 정렬해 줍니다.
2단계: K번째 수 찾기
정렬된 배열에서 K번째 수를 찾는 것은 아주 간단합니다. K가 2라면, K번째 수는 정렬된 배열의 인덱스가 K – 1인 위치에 있는 수가 됩니다.
C# 코드 구현
이제 위의 방법을 기반으로 C# 코드를 구현해보겠습니다:
using System;
class KthLargestNumber
{
static void Main()
{
// 입력 받기
int N = int.Parse(Console.ReadLine());
int[] arr = new int[N];
string[] input = Console.ReadLine().Split();
for (int i = 0; i < N; i++)
{
arr[i] = int.Parse(input[i]);
}
int K = int.Parse(Console.ReadLine());
// 배열 정렬
Array.Sort(arr);
// K번째 수 찾기
Console.WriteLine(arr[N - K]);
}
}
코드 설명
1. using System;
구문은 System 네임스페이스에서 다양한 클래스를 사용할 수 있도록 합니다.
2. int N = int.Parse(Console.ReadLine());
를 통해 첫 번째 줄의 입력을 받고, 배열의 크기 N을 저장합니다.
3. int[] arr = new int[N];
로 길이가 N인 정수형 배열을 선언합니다.
4. Console.ReadLine().Split();
메서드를 통해 두 번째 줄의 입력을 받아 공백으로 구분된 문자열을 배열에 저장합니다.
5. Array.Sort(arr);
를 사용하여 배열을 오름차순으로 정렬합니다.
6. Console.WriteLine(arr[N - K]);
를 통해 K번째로 큰 수를 출력합니다. 여기서 N – K 인덱스에 해당하는 수가 K번째로 큰 수입니다.
시간 복잡도 분석
이번 문제의 시간 복잡도는 배열을 정렬하는 과정에서 결정됩니다. 정렬 알고리즘의 시간 복잡도는 최악의 경우 O(N log N)
입니다. 이후 K번째 수를 찾는 과정은 O(1)
이므로 전체적으로 O(N log N)
의 시간 복잡도를 가집니다.
결론
이번 강좌에서는 배열에서 K번째 수를 찾는 방법에 대해 알아보았습니다. 문제를 해결하기 위해 배열 정렬과 인덱스를 활용하는 방법을 배웠습니다. 이 문제는 코딩 테스트에서 자주 등장하므로, 다양한 변형 문제를 풀어보면서 실력을 쌓아 나가길 바랍니다. 다음 강좌에서도 유익한 주제로 찾아뵙겠습니다. 감사합니다!