코딩테스트/SWEA
[Python, 파이썬] SWEA 6808. 규영이와 인영이의 카드게임
알코딩
2024. 10. 22. 05:09
9라운드에 걸쳐서 게임을 했을 때, 규영이가 이기는 경우와 지는 경우가 총 몇 가지인지 구하는 문제.
[코드]
import itertools # 순열, 조합 계산을 위한 라이브러리
T = int(input()) # 테스트케이스 개수 T
for test_case in range(1, T+1):
card = list(map(int, input().split())) # 규영이가 받은 9장의 카드
other = list(set(range(1, 19))-set(card)) # 인영이가 받은 카드
win = lose = 0 # 규영이 이기고, 지는 경우의 수
# 서로 다른 9개 조합
for n in itertools.permutations(other, 9):
player1 = player2 = 0 # 규영이, 인영이 점수
for i in range(9):
if (card[i] > n[i]): # 규영이 점수가 더 크면
player1 += card[i] + n[i] # 규영이한테 점수
else: player2 += card[i] + n[i] # 인영이한테 점수
if (player1 > player2):
win += 1 # 규영이가 승
else: lose += 1 # 인영이가 승
print("#%d %d %d" %(test_case, win, lose))
[문제풀이]
우선 이 문제는 파이썬으로 풀 수 없는 문제다.
시간 초과를 떠나서 아예 언어 선택에 파이썬 자체가 없다.

우선, 18개의 카드 더미에서 규영이가 받은 카드를 빼서 인영이가 받은 카드를 구한다.
other = list(set(range(1, 19))-set(card)) # 인영이가 받은 카드
이건 차집합을 구하는 연산을 사용하였다.
itertools.permutations(other, 9)
그 후, itertools의 permutations 연산으로 9개의 카드에서 9개의 카드를 빼는 모든 조합을 구한 다음에 각 조합마다 정해진 규영이의 순서와 계산해 라운드를 계산해 지는 경우, 이기는 경우를 각각 구해주면 된다.