KEEP GOING
[python] SWEA 5203 : 베이비진 게임 본문
반응형
1. 코드 구현
def isRun(arr):
tmp = sorted(arr)
n = len(arr)
for i in range(0, n-2):
# 반례) 4 5 5 6
# if tmp[i] == (tmp[i+1] - 1) and tmp[i] == (tmp[i+2] - 2):
if (tmp[i]+1) in tmp and (tmp[i]+2) in tmp:
return True
return False
def isTriplet(arr):
n = len(arr)
for i in range(n):
count = arr.count(arr[i])
if count >= 3:
return True
return False
T = int(input())
for tc in range(1, T+1):
result = 0
cards = list(map(int, input().split()))
player1 = []
player2 = []
for i in range(0, 12, 2):
player1.append(cards[i])
player2.append(cards[i+1])
# 먼저 run이나 triplet되는 경우 승리
for i in range(4):
result1 = isRun(player1[:i+3]) or isTriplet(player1[:i+3])
if result1:
result = 1
break
result2 = isRun(player2[:i+3]) or isTriplet(player2[:i+3])
if result2:
result = 2
break
print(f"#{tc} {result}")
숫자카드로 [1,2,9,8,3]을 받았을 때 1, 2, 3은 연속된 숫자이기에 run이 되어 승리한다.
주석한 것처럼 구현하면 [1,4,5,5,6]을 카드로 받았을 때 정렬된 숫자는 1,4,5,5,6이 되므로 run이지만 run을 리턴할 수 없다. 여기서 문제가 발생해서 애를 먹었다.
if (tmp[i]+1) in tmp and (tmp[i]+2) in tmp 와 같은 조건문으로 필터링하여 문제를 해결할 수 있었다.
처음부터 player1과 player2의 숫자 카드 리스트를
player1 = [0 for _ in range(10)]
player2 = [0 for _ in range(10)]
와 같이 구현하여 숫자 0~9에 대해 인덱스로 접근할 수 있도록 하였다면 더 깔끔한 코드가 되었을 것이다.
반응형
'code review > greedy' 카테고리의 다른 글
[python] 백준 2437번 : 저울 (0) | 2022.03.02 |
---|---|
[python] SWEA : 컨테이너 운반 (0) | 2022.02.11 |
[python] 백준 10610 : 30 (0) | 2022.02.10 |
[python] SWEA 5202 : 화물 도크 (0) | 2022.02.08 |
[python] 백준 15486 번 : 퇴사2 (0) | 2022.01.26 |
Comments