TODAY TIL
🔍 문제 소개
이번 포스팅에서는 배열에서 K번째 수를 찾는 문제를 다룹니다. 이 문제는 정렬 알고리즘의 기초를 연습하기에 적합하며, 간단한 구현으로도 해결할 수 있는 문제입니다. 문제를 이해하고, 순서대로 해결 방법과 코드를 공유하겠습니다!
📝 문제 설명
문제
- 크기가 N인 배열 A가 주어집니다.
- 배열 A를 오름차순으로 정렬했을 때, 앞에서부터 K번째 수를 출력하세요.
입력 조건
- 첫 번째 줄: 정수 N과 K
- 1 ≤ N ≤ 5,000,000, 1 ≤ K ≤ N
- 두 번째 줄: 배열 A의 원소들
- -10⁹ ≤ Aᵢ ≤ 10⁹
출력 조건
- 배열을 정렬했을 때 앞에서부터 K번째 수를 출력합니다.
💡 풀이 방법
이 문제는 크게 3단계로 해결할 수 있습니다:
- 배열 입력받기
- 오름차순 정렬하기
- K번째 수 추출하기
🛠️ 코드 구현
Python을 사용하여 문제를 해결하는 코드는 다음과 같습니다:
# 입력 받기
import sys
input = sys.stdin.read
data = input().split()
# N: 배열의 길이, K: 찾고자 하는 위치
N, K = int(data[0]), int(data[1])
A = list(map(int, data[2:]))
# 배열을 정렬
A.sort()
# K번째 수 출력 (1-based index이므로 K-1 사용)
print(A[K - 1])
🔎 코드 설명
1️⃣ 입력 받기
- Python의 sys.stdin.read를 사용해 입력 데이터를 한 번에 받습니다.
- 첫 번째 줄에서 N(배열 길이)과 K(찾고자 하는 위치)를 가져옵니다.
- 두 번째 줄에서 배열 A를 리스트로 변환합니다.
2️⃣ 배열 정렬
- 배열 A를 sort() 메서드를 사용해 오름차순 정렬합니다.
Python의 sort()는 Timsort 알고리즘을 기반으로 작동하며, 시간 복잡도는 **O(N log N)**입니다.
3️⃣ K번째 수 추출
- 배열은 0부터 시작하는 0-based index입니다. 따라서 K번째 수를 찾으려면 A[K-1]을 사용합니다.
🧩 예제 풀이
예제 입력
5 2
4 1 3 2 5
풀이 과정
- 배열의 길이 N = 5, K번째 위치 K = 2
배열 A = [4, 1, 3, 2, 5] - 배열 정렬:
A.sort() → [1, 2, 3, 4, 5]
3. K번째 수 추출:
A[K-1] = A[1] = 2
4. 출력 결과:
2
⏱️ 시간 복잡도 분석
- 배열 정렬: 정렬의 시간 복잡도는 O(N log N)
- K번째 수 추출: 상수 시간 O(1)
따라서 전체 시간 복잡도는 **O(N log N)**입니다.
📌 추가 팁: 더 효율적인 방법은 없을까?
만약 배열이 매우 커서 메모리나 시간 효율이 중요하다면, Quickselect 알고리즘을 사용해 K번째 수를 찾을 수 있습니다. Quickselect는 평균적으로 **O(N)**의 시간 복잡도로 실행됩니다. 그러나 이 문제에서는 Python의 내장 정렬을 사용하는 것이 가장 간단하고 안정적인 방법입니다.
✅ 마무리
배열에서 K번째 수를 찾는 문제는 정렬 알고리즘과 리스트 활용법을 연습할 수 있는 좋은 문제입니다. 이번 포스팅에서는 Python의 기본 정렬 메서드인 sort()를 사용하여 문제를 간단히 해결했지만, 다른 알고리즘을 적용해보는 것도 추천합니다!
'python' 카테고리의 다른 글
99클럽 코테 스터디_4기 27일차 TIL (0) | 2024.11.25 |
---|---|
99클럽 코테 스터디_4기 26일차 TIL (0) | 2024.11.24 |
99클럽 코테 스터디_4기 24일차 TIL (0) | 2024.11.21 |
99클럽 코테 스터디_4기 23일차 TIL (1) | 2024.11.20 |
99클럽 코테 스터디_4기 22일차 TIL (0) | 2024.11.19 |