Stay Hungry Stay Foolish

SWEA

[SWEA] 5948. 새샘이의 7-3-5 게임 (Python/D3)

dev스카이 2023. 11. 16. 08:03
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


설명

서로 다른 7개의 정수 중 3개의 정수를 골라 합을 구해서 수를 만들려고 한다.
이렇게 만들 수 있는 수 중에서 5번째로 큰 수를 출력한다.

 

풀이

조합(combinatinos) 사용

1. 반복문으로 3개씩 조합을 만들고 합을 리스트에 저장한다.

2. sorted를 사용해 내림차순 정렬을 하고 set으로 중복을 제거한다.

3. 리스트의 5번째(인덱스 = 4)를 출력한다.

 

✔️ combinations

combinations 함수를 사용하기 위해선 itertools 라이브러리를 가져와야 한다.

from itertools import combinations

 

✔️ combinations(리스트, 정수)

정수 자리에 3을 넣으면 3개의 숫자로 조합을 한다.

from itertools import combinations
n = [1, 2, 3, 4]
ans = list(combinations(n, 3))
print(ans)

#결과
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]

 

itertools에는 combinations 말고도 순열(permutations)이 있는데, 조합은 순서를 고려하지 않지만 순열은 순서를 고려한다. 

 

permutaions 사용

from itertools import permutations
n = [1, 2, 3]
ans = list(permutations(n, 2))
print(ans)

#결과
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

 

combinations 사용

from itertools import combinations, permutations
n = [1, 2, 3]
ans = list(combinations(n, 2))
print(ans)

#결과
[(1, 2), (1, 3), (2, 3)]

 

✔️ set(list) - 중복 제거

n = [1, 1, 2, 2, 3]
print(set(n))

#결과
{1, 2, 3}

 

Solution

from itertools import combinations
t = int(input())
for tc in range(1, t+1):
    n = list(map(int, input().split()))
    ans = []
    for i in combinations(n, 3): #list로 안 묶어도 됨
        ans.append(sum(i))
    ans = list(set(sorted(ans, reverse=True))) #중복 제거 해야 함 - set 사용
    print('#'+str(tc), ans[4])