문제 제목: K번째 큰 수
현수는 1부터 100사이의 자연수가 적힌 N장의 카드를 가지고 있습니다.
같은 숫자의 카드가 여러장 있을 수 있습니다. 현수는 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록하려 고 합니다.
3장을 뽑을 수 있는 모든 경우를 기록합니다.
기록한 값 중 K번째로 큰 수를 출력 하는 프로그램을 작성하세요.
만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19......이고 K값이 3이라면 K번째 큰 값 은 22입니다.
▣ 입력설명
첫 줄에 자연수 N(3<=N<=100)과 K(1<=K<=50) 입력되고, 그 다음 줄에 N개의 카드값이 입력 된다.
▣ 출력설명
첫 줄에 K번째 수를 출력합니다.
K번째 수는 반드시 존재합니다.
▣ 입력예제
10 3
13 15 34 23 45 65 33 11 26 42
▣ 출력예제
143
나의 풀이
n, k = map(int,input().split())
card = list(map(int,input().split()))
num = []
for i in range(n):
for j in range(i+1,n): #i는 선택 되었으니 i뒤의 것을 선택
for x in range(j+1,n): #j는 선택되었으니 j뒤의 것을 선택
num.append(card[i] + card[j] + card[x])
num = list(set(num)) #중복 제거
num = sorted(num, reverse = True) #내림차순 정렬
print(num[k-1]) #K번째 큰 수 출력
#3개의 숫자를 더해서 나올 수 있는 수를 리스트에 저장하고 set함수로 중복을 없앤다.
※ 알아야 할 것
- for문에서 범위를 지정할 때 막막했는데 위의 문제 풀이 처럼 하면된다.
- set함수로 중복을 없애고, sorted함수로 정렬해주는 것
- sorted(list , reverse = True)는 다르게 표현하면 list.sort(reverse = True)로 표현 할 수 있다.
'coding test - python > 기본기 문제' 카테고리의 다른 글
문제 / 소수 개수 출력하기 (에라토스테네스 체) / Python (0) | 2022.03.31 |
---|---|
문제 / 정다면체 / Python (0) | 2022.03.31 |
문제 / 대푯값 / Python (0) | 2022.03.31 |
문제 / K번째 수 / Python (0) | 2022.03.30 |
문제 / K번째 약수/ Python (0) | 2022.03.30 |