코딩하는 베어브릭

구현 문제 #3. K번째 큰 수 본문

알고리즘/인프런: 파이썬 알고리즘 문제풀이

구현 문제 #3. K번째 큰 수

bearbrick 2022. 5. 15. 02:43

*이 풀이는 인프런: 파이썬 알고리즘 문제풀이 강좌에 기반하였습니다.

 

 

 

내 풀이

 

1. N장 중 3장의 숫자 값을 합한 모든 경우의 수를 구하기 위해서 3중 for문을 사용한다.

2. 합이 같은 경우, 중복을 제거하기 위해서 set을 사용한다.

3. K번째로 큰 수를 보다 편리하게 구하기 위해서 역순으로 정렬한다.

 

import sys
sys.stdin=open("input.txt","rt")
sum=[]
J=1
R=2
N,K=map(int, input().split())
arr=list(map(int, input().split()))
for i in range(N):
    for j in range(J,N):
        for r in range(R,N):
            sum.append(arr[i]+arr[j]+arr[r])
        R+=1
    J+=1
    R=J+1
sum_set = set(sum)
sum=list(sum_set)
sum.sort(reverse=True)
print(sum[K-1])

 

 

 

강사님 풀이

 

import sys
sys.stdin=open("input.txt","rt")
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): #j는 i뒷부분부터
        for m in range(j+1,n): #m은 j뒷부분부터
            res.add(a[i]+a[j]+a[m])
res=list(res)
res.sort(reverse=True)
print(res[k-1])

 

 

 

배운 점

 

1. set( )이라는 자료구조는 중복을 허용하지 않는다.

2. set은 자료를 추가하기 위해서 append( )가 아닌 add( )를 사용한다.

3. set은 sort( ) 함수를 사용할 수 없고, 리스트는 사용 가능하다.

Comments