본문 바로가기
챌린지/코딩 테스트 30일 챌린지

[코딩 테스트 30일 챌린지] : 03

by 오주현 2022. 6. 14.
반응형
코딩 테스트 30일 챌린지

푼 문제 수 : 1
문제 요약

1부터 100까지 적힌 카드 중 3개를 뽑을 수 있는 모든 경우를 기록해 뽑은 후 값을 더한다. 이 중 k번째로 큰 수를 출력하자.

 

입, 출력 예제

입력:

10 3

13 15 34 23 45 65 33 11 26 42

 

출력:

143

풀이
n, k = map(int, input().split())
a = list(map(int, input().split()))

res = 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 = list(res)
res.sort(reverse=True)

print(res[k-1])

 

n, k = map(int, input().split())
a = list(map(int, input().split()))

입력 받을 값과 뽑아서 더한 값을 담을 것을 만든다.

 

# set 자료구조는 중복을 제거한다.
res = set()

set 자료구조는 중복을 제거한다.

 

# 중복을 방지하면서 뽑기 위해서 마지막 숫자를 돌려주면서 카운팅 뽑아준다.
# a 리스트에 0번 인덱스부터 자료가 들어가서 0부터 for문이 돌아야한다.
for i in range(n):

중복 방지를 위해 for문 3개를 사용해 각 for문 당 1개의 카드를 뽑는다.

 

# i가 1을 뽑으면 j는 +1을 해서 2를 뽑는다.
for j in range(i+1, n):

 

# j가 2를 뽑으면 m은 +1을 해서 3을 뽑는다.
for m in range(j+1, n):

 

# set은 add로 값을 넣어준다.
# 위에 for문을 통해 중복을 줄여주면서 값을 담아줄 수 있다.
res.add(a[i] + a[j] + a[m])

res에 뽑은 카드 값을 더한다.

 

# 리스트에 담아준다.
res = list(res)

 

# 내림차순 정렬을 위해 reverse를 true로 준다.
res.sort(reverse=True)

 

# k번째를 뽑아야 하는데 0번 인덱스부터 있기 때문에 -1을 해준다.
print(res[k-1])

 


 

 

반응형

댓글