Hi, There!
안녕하세요, 바오밥입니다.
목차
- 문제
- 풀이
문제
문제 설명
자연수가 들어있는 리스트에서 숫자 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 해주세요.
예제
예제 설명
예제 #1
문제의 예제와 같습니다.
풀이
풀이 코드 및 해설
def solution(arr, K):
answer = 10000
arr.sort()
# 리스트 오름차순 정렬
# 그럼 0번 요소가 제일 작은 숫자임
# 마지막 요소가 제일 큰 숫자임
# 따라서 K 값이 5라면 0~4의 요소 중 제일 큰 값 - 작은 값을 해야함
for i in range(len(arr)-(K-1)):
# 6개의 요소가 있을 때 K값이 4이면 비교해야 하는 조합은
# 0~3, 1~4, 2~5임
# 인덱스 0번 시작을 고려하여 K-1
temp = arr[i+K-1] - arr[i]
# 제일 큰 값 - 제일 작은 값
# K씩 묶었을 때 i는 제일 작은 값
# i+K-1은 제일 큰 값
if temp < answer: answer = temp
# 만약 temp 값이 answer 값보다 작으면 answer 값에 temp 값 대입
# 즉, 현재 반복문의 차수 크기가 더 작을 경우에 answer 값을 변경
return answer
'Certificate > Cert - Cos Pro 1급' 카테고리의 다른 글
[Cos Pro 1급] 기출문제 1회차, 음식 전문점 운영 (0) | 2021.07.05 |
---|---|
[프로그래머스] Cos Pro 1급 모의고사, 단어를 순서대로 적으세요 (0) | 2021.07.02 |
[프로그래머스] Cos Pro 1급 모의고사, 꽃 피는 봄이 언제 오나요 (0) | 2021.07.01 |
[프로그래머스] Cos Pro 1급 모의고사, 카드 섞기 (0) | 2021.07.01 |
[프로그래머스] Cos Pro 1급 모의고사, 코인을 많이 획득하세요 (2) | 2021.07.01 |