첫 줄 입력 자연수 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

+ Recent posts