본문 바로가기
Python/알고리즘

[COS PRO 1급 #6-3] 큰 수와 작은 수의 차이

by 포푸리 (POPOOLY) 2023. 3. 9.
반응형

문제설명

자연수가 들어있는 리스트에서 숫자 K개를 선택하려 합니다. 이때, 선택한 숫자 중 가장 큰 수와 가장 작은 수의 차이가 최소가 되도록 해야합니다.

예를 들어 리스트에 들어있는 숫자가 [9, 11, 9, 6, 4, 19] 이고, K = 4 라면

* 숫자 4개를 [9, 11, 9, 6]로 뽑으면 (가장 큰 수 - 가장 작은 수) = (11 - 6) = 5가 됩니다.
* [9, 9, 6, 4] 와 같이 숫자를 뽑아도  (가장 큰 수 - 가장 작은 수) = (9 - 4) = 5가 됩니다.

그러나 가장 큰 수와 가장 작은 수의 차이가 5보다 작아지도록 숫자 4개를 선택하는 방법은 없습니다.

자연수가 들어있는 리스트 arr, 선택해야 하는 숫자 개수 K가 매개변수로 주어질 때, 선택한 숫자중 가장 큰 수와 가장 작은 수의 차이가 최소가 되록 arr에서 숫자 K개를 선택했을 때, 그때의  가장 큰 수와 가장 작은 수의 차이를 return 하도록 solution 함수를 완성해주세요.

매개변수 설명

자연수가 들어있는 리스트 arr, 선택해야 하는 숫자 개수 K가 solution 함수의 매개변수로 주어집니다.

* arr 리스트의 길이는 5 이상 1,000 이하입니다.
* arr의 원소는 1 이상 10,000 이하인 자연수입니다.
* K 는 4 이상 50 이하인 자연수입니다.

return 값 설명

선택한 숫자중 가장 큰 수와 가장 작은 수의 차이가 최소가 되도록 arr에서 숫자 K개를 선택했을 때, 그때의  가장 큰 수와 가장 작은 수의 차이를 return 해주세요.

예시

| arr                  | K | return |
|----------------------|---|--------|
| [9, 11, 9, 6, 4, 19] | 4 | 5      |

예시 설명

예시 #1
문제의 예시와 같습니다.

문제 코드

def solution(arr, K):
    #여기에 코드를 작성해주세요.
    answer = 0
    return answer

풀이

# arr와 K의 길이차가 짝수이면 오름차순 정렬한 arr의 앞뒤로 길이차의 절반을 제외하면 됨
# arr와 K의 길이차가 홀수이면 오름차순 정렬한 arr의 앞뒤로 (길이차-1)의 절반을 제외하고 앞 1개와 뒤 1개를 제외한 값을 비교하면 됨
def solution(arr, K):
	arr.sort()
	length = len(arr)-K
	arr = arr[length//2:-length//2]
	if length % 2 == 0:
		answer = arr[-1] - arr[0]
	else:
		arr1 = arr[1:]
		arr2 = arr[:-1]
		if arr1[-1] - arr1[0] > arr2[-1] - arr2[0]:
			answer = arr1[-1] - arr1[0]
		else:
			answer = arr2[-1] - arr2[0]
	return answer

댓글