SWEA 5203 베이비진 게임

홍찬우·2022년 12월 25일
0

문제

베이비진 게임

12장의 숫자 카드 중 6개씩 나눠 가지며

연속된 숫자 3개 혹은 같은 숫자 3개를 먼저 갖는 쪽이 승리


풀이

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 받는 것이 익숙하지 않다..

profile
AI-Kid

0개의 댓글