1. 카운팅 정렬을 이용 (길이가 10인 0 리스트를 player1, player2에 대해 각각 생성)
2. 카드를 하나씩 받을 때마다 run, triplet 모두 체크하며 승리 여부 판단
A = [2, 8, 7, 7, 0, 2, 2, 2, 5, 4, 0, 3] # 전체 카드
arr1 = [0]*10 # player 1 counting list
arr2 = [0]*10 # player 2 counting list
flag = 0 # 1이면 player1 win, 2면 player2 win, 0이면 draw
def run(arr): # 연속된 숫자가 3개 있는지 체크
li = [i for i, j in enumerate(arr) if j != 0] # 배열에서 0이 아닌 원소들의 인덱스를 리스트로 저장, 해당 리스트에 연속된 숫자가 있는지 체크
i = 0
while i < len(li)-2:
if li[i+1] == li[i]+1 and li[i+2] == li[i+1]+1: # 연속으로 3개의 숫자가 등장하면 True를 리턴하며 함수 종료
return True
else:
i += 1
return False
for a in range(12): # 카드를 순서대로 1개씩 받을 때마다 게임 승패 여부를 체크
if a % 2 == 0: # 짝수번 째 카드는 arr1 연산
arr1[A[a]] += 1 # ex) 카드 2를 받으면 arr1의 2번째 값 +1
else: # 홀수번 째 카드는 arr2 연산
arr2[A[a]] += 1
if 3 in arr1: # 똑같은 카드를 3번 받으면 counting list에 3이 등장
flag = 1
break
elif 3 in arr2:
flag = 2
break
if run(arr1):
flag = 1
break
elif run(arr2):
flag = 2
break
if flag == 1:
print(1)
elif flag == 2:
print(2)
else:
print(0)
카운팅 정렬이 생각보다 잘 쓰이는 것 같아 숙지를 잘 해놓을 필요가 있어 보인다.
여전히 input 받는 것이 익숙하지 않다..