본문 바로가기
알고리즘 풀이/SW Expert Academy

[SWEA] 베이비진 게임 문제(python)

by char_lie 2023. 3. 31.
반응형

SWEA Learning → programming Advanced → 탐욕 알고리즘 8차시 문제

https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDYSqAAbw5UW6&subjectId=AWUYEGw61n8DFAVT# 

 

SW Expert Academy

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

swexpertacademy.com

베이비진 게임 문제

0~9까지 숫자를 하나 씩 배분해 3개의 숫자가 run, triplet을 만족했을 때 승자를 구하는 게임을 구현하는 문제

카운팅 배열로 풀면 간단하게 풀 수 있다!

⚙️내가 푼 정답 코드

def check(card,win): # 베이비 진 체크
    cnt = 0
    for num in card:
        if num: # 만약 카운팅 배열에 숫자가 들어있으면
            cnt += 1 # 횟수 증가
        else: # 없으면
            cnt = 0 # 초기화
        if cnt == 3 or num == 3: # 연속된 숫가거나 같은 숫자 3개면
            return win # 이겼다
    return 0

T = int(input())
for case in range(1,T+1):
    num = list(map(int, input().split()))
    result = 0 # 결과
    p1, p2 =[0]*10, [0]*10 # 카운팅 배열
    for i, x in enumerate(num): #카드 배치하자
        if i % 2: # 홀수면
            p2[x] += 1 # 2번 플레이어에게
            result = check(p2,2)
        else: # 짝수면
            p1[x] += 1 # 1번 플레이어에게
            result = check(p1,1)
        if result: #결과 났으면
            break # 끝
    print(f'#{case} {result}')

📌문제 접근 포인트

1. 한 턴마다 각각 카드를 지급 받는다. 카드를 지급 받을 때 어떤 카드를 갖고 있는지 체크해줄 카운팅 배열을 하나 만들어 주자.
2. 턴이 돌 때마다 카드의 상태를 확인하고 run or triplet인지 체크를 해보자.
3. 카운팅 배열을 이용하면 같은 카드가 3개일 때, 연속한 숫자 3개 일 때에 대한 케이스를 어렵지 않게 구할 수 있다.
4. 결과 나오면 끝내고 승자 반환하게 구성해주면 끝

 

반응형

댓글