본문 바로가기

백앤드 개발/코딩테스트

[파이썬 문제 풀이] k번째 큰 수

1. 문제

1~100 사이 자연수 적힌 카드 n장을 가짐, 중복이 있을 수 있음
이 중 3장을 뽑아 모든 경우의 수 기록
기록한 값 중 k번째로 큰 수를 출력하라
첫 줄에 자연수 n, k가 입력
그 다음 줄에 카드값이 입력

 

2. 풀이

import sys
sys.stdin=open("input.txt", "r")

n, k = map(int, input().split()) # 첫번째 줄 n, k 입력
a = list(map(int, input().split())) # 두번째 줄 리스트 입력

res = set() # 중첩되는 요소를 갖지 않는 set 선언
for i in range(n):
    for j in range(i+1, n):
        for m in range(j+1, n):
            res.add(a[i]+a[j]+a[m]) # 합을 res 에 요소로 추가. 이때 중복되는 값들은 추가되지 않음.


res.sort(reverse = True) # 내림차순으로 정렬
print(res[k-1]) # k번째 수 출력

 

3. 배운 내용

1) a,b = map(int, input().split()) : 입력된 값을 띄어쓰기로 구분하며 이를 int 자료형으로 바꾼다.

2) 리스트명 = list( map(int, input().split()) ): 입력된 값을 띄어쓰기로 구분하여 리스트 요소로 추가

2) 자료형 set: 고유한 값들의 집합. 중복된 값을 허용하지 않으며 순서가 없다.

set.add(자료값): set의 요소로 추가. 이 때 중복되는 값은 추가되지 않음.

3) res.sort() / res.sort(reverse = True): 리스트 값 오름차순 정렬 / 내림차순 정렬

 

 

 

참조: https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8