set() 함수

도로롱·2022년 11월 21일

문제

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

  • set() 함수를 사용하여 중복값 제거 하기
  • 3중 for문을 사용하여 카드 뽑기

# 인자 값 입력 받기
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은 중복되므로 제거하여 출력
profile
질문 없는 성장은 없다. 3년차 데이터 분석가

0개의 댓글