두 개의 숫자 리스트 A와 B, 그리고 값 k가 주어졌을 때, A의 요소 중 B의 최소 k개 요소보다 엄격하게 작은 요소의 개수를 구하는 문제입니다.
예를 들어 입력이 A = [6, -2, 100, 11], B = [33, 6, 30, 8, 14], k = 3이라면 결과는 3이 됩니다. 그 이유는 -2, 6, 11이 각각 B의 최소 3개 요소보다 작기 때문입니다.
해결 접근 방법
이 문제는 다음 단계를 통해 해결할 수 있습니다.
- k가 0이면 조건이 자동으로 만족되므로 A의 크기를 그대로 반환합니다.
- B를 내림차순으로 정렬합니다.
- 카운터 변수 ct를 0으로 초기화합니다.
- A의 각 요소 i에 대해, i가 B[k-1]보다 작으면 ct를 1 증가시킵니다.
- 최종적으로 ct를 반환합니다.
B를 내림차순으로 정렬하면 B[k-1]은 B에서 k번째로 큰 값이 됩니다. 따라서 어떤 요소가 B[k-1]보다 작다면, 그 요소는 자동으로 B의 상위 k개 요소 전부보다 작다는 의미이므로 조건을 만족하게 됩니다. 덕분에 각 요소마다 일일이 비교하지 않고도 한 번의 비교만으로 판단할 수 있어 효율적입니다.
예제 코드
class Solution:
def solve(self, A, B, k):
if k == 0:
return len(A)
B.sort(reverse=True)
ct = 0
for i in A:
if i < B[k - 1]:
ct += 1
return ct
ob = Solution()
A = [6, -2, 100, 11]
B = [33, 6, 30, 8, 14]
k = 3
print(ob.solve(A, B, k))
입력
[6, -2, 100, 11], [33, 6, 30, 8, 14], 3
출력
3