코딩하는 베어브릭
구현 문제 #3. K번째 큰 수 본문
*이 풀이는 인프런: 파이썬 알고리즘 문제풀이 강좌에 기반하였습니다.
내 풀이
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( ) 함수를 사용할 수 없고, 리스트는 사용 가능하다.
'알고리즘 > 인프런: 파이썬 알고리즘 문제풀이' 카테고리의 다른 글
| 구현 문제 #6. 자릿수의 합 (0) | 2022.05.16 |
|---|---|
| 구현 문제 #5. 정다면체 (0) | 2022.05.15 |
| 구현 문제 #4. 대표값 (0) | 2022.05.15 |
| 구현 문제 #2. K번째 수 (0) | 2022.05.15 |
| 구현 문제 #1. K번째 약수 (0) | 2022.05.14 |
Comments