문제
1부터 100까지의 자연수가 적힌 n장의 카드를 갖고 있다. 같은 숫자의 카드가 여러장 있을 수 있다. 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록하려고 한다. 3장을 뽑을 수 있는 모든 경우의 수를 기록한다. 기록한 값 중에서 K번째로 큰 수를 출력하는 프로그램을 작성하세요
출력 설명
K번째 수는 반드시 존재한다
n =10 , K = 3
13 15 34 23 45 65 33 11 26 42
출력 예제1
143
틀린 이유
n장중 3장을 뽑아 합을 만드는 것을 구현하는게 도무지 생각이 나지 않았다
idea
# 인자 값 입력 받기
n,k = map (int, input().split())
a = list (map (int, input().split()))
# 숫자 뽑기 >> 3중 for 문 (3장 뽑기 때문에)
res = set() # 각 합들의 제거
for i in range(n):
for j in range(i+1,n):
for x in range(j+1,n):
res.add(a[i]+a[j]+a[x]) # set 함수는 add 함수로 이어붙어야 함
res = list(res) # 리스트로 변경하여 정렬하기
res.sort(reversed = True)
print(res[k-1])
set() 함수
# set 함수에 중복값이 있을 경우 중복값을 자동으로 제거함
a= set([1,2,3,4,4,5])
print(a) #{1, 2, 3, 4, 5} # 딕셔너리 형태로 출력
# set 인자에 add 할때는 하나의 숫자, 하나의 문자, 하나의 튜플만이 가능함
res = set()
a= [0,0,1,2,3]
for i in a: # 한개씩 넣어주기 위해서 for문 사용
res.add(i)
print(res) #{0, 1, 2, 3} # 0은 중복되므로 제거하여 출력