첫 줄 입력 자연수 N(3 <=N <=100), 자연수 K (1 <=K <=50)
둘 째줄 입력 자연수 1 ~ 100 사이의 자연수 N개의 배열
N개의 배열에서 3개의 값을 조합하여 구할 수 있는 값 중에 K 번째로 큰 값 구하기
주의해야 할 처리 사항 : 중복 숫자 값 입력 가능, K 번째 큰 수에서 중복하는 값은 무시 (ex. [5,5,4,2]에서 2번째로 큰 값은 4)
def find(arraySortedData, index, arraySumData, arrayMaxData,depth):
if depth == 3:
arrayMaxData.append(arraySumData[0])
return
for i in range(index, len(arraySortedData)):
arraySumData[0] += arraySortedData[i]
find(arraySortedData, i + 1, arraySumData, arrayMaxData, depth + 1)
arraySumData[0] -= arraySortedData[i]
N, K = map(int, input().split())
arrayData = list(map(int,input().split()))
arrayMaxData = []
arraySumData = [0]
find(arrayData, 0, arraySumData, arrayMaxData, 0)
arrayMaxData.sort(reverse=True)
count = 1
preData = arrayMaxData[0]
for i in range(1, len(arrayMaxData)):
if count == K:
print(preData)
break
if preData != arrayMaxData[i]:
count += 1
preData = arrayMaxData[i]
후기
재귀 함수를 이용해서 결과를 구했다. 처음에는 입력 배열 값을 오름차순 정렬하여 재귀 함수를 통해 순회하는 값은 자동으로 오름차순 정렬이 되어있는 배열인 줄 알고 착각을 했다. 하지만 결과는 아니었다. 이 문제 때문에 10분 정도 삽질했다. 추가로 c++에서는 함수에 &예약어를 통해 call by reference를 사용했지만 python은 참조 예약어를 몰라서 배열을 만들어 사용했다.
'Program > Python' 카테고리의 다른 글
itertools의 순열(permutation), 조합(combination) (0) | 2022.08.02 |
---|---|
Sinc 함수 구현 (0) | 2021.05.06 |
람다 표현식 (0) | 2021.04.24 |
2차원 리스트 다루기 (0) | 2021.04.13 |
List 다루기(2/2) (0) | 2021.03.22 |