Notice
Recent Posts
Recent Comments
Archives
04-29 00:39
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
관리 메뉴

줴림이 공부하줴림

5203. [파이썬 S/W 문제해결 구현] 3일차 - 베이비진 게임 본문

Study/SWEA

5203. [파이썬 S/W 문제해결 구현] 3일차 - 베이비진 게임

줴림 2025. 4. 24. 03:06

그동안 계속 동영상 강의에서 나왔던 베이비진 문제를 풀어봤다. 각각 플레이어 1과 2가 숫자카드를 번갈아 뽑는데, 둘 중 한 명이라도 연속된 숫자 3개 이상이거나 동일한 숫자 3개 이상이면 바로 승자가 결정된다.

def check(player):
    if len(player) <= 2:     # 2장 이하는 승리 조건 달성조차 안됨
        return False
    sp = sorted(player)

    for i in range(len(sp)-2):
        if sp[i] == sp[i+1]-1 and sp[i] == sp[i+2]-2:
            return True
        elif sp[i] == sp[i+1] == sp[i+2]:
            return True
    return False

T = int(input())
for test_case in range(1, T+1):
    arr = list(map(int, input().split()))
    player1 = []
    player2 = []
    answer = 0

    for i in range(len(arr)):
        if i % 2 == 0:
            player1.append(arr[i])
            if check(player1):
                answer = 1
                break
        else:
            player2.append(arr[i])
            if check(player2):
                answer = 2
                break
    print(f"#{test_case} {answer}")

 

처음엔 이 코드로 작성해서 문제를 해결하려고 했는데, 마지막 테스트케이스에서 오답이 나왔다. 뭐가 문젠지 다시 보니까 딱 카드가 3장일 때만 고려했었다. 그래서 check 함수 부분만 살짝 바꿔줬다.

기존 방식이 플레이어가 가지고 있는 카드 자체에서 승리 조건을 만족하는지 보고 있는 거였는데, 여기서 플레이어가 가지고 있는 숫자 카드의 개수를 세어서 판단하는 방식으로 바꿨다. 이렇게 바꾸니까 무사히 Pass가 나오더라..

def check(player):
    count = [0] * 10    # 카드가 10까지 있으므로
    for card in player:
        count[card] += 1
    
    for i in range(10):
        if count[i] >= 3:
            return True
        if i <= 7 and count[i] >= 1 and count[i+1] >= 1 and count[i+2] >= 1:
            return True
    return False


T = int(input())
for test_case in range(1, T+1):
    arr = list(map(int, input().split()))
    player1 = []
    player2 = []
    answer = 0

    for i in range(len(arr)):
        if i % 2 == 0:
            player1.append(arr[i])
            if check(player1):
                answer = 1
                break
        else:
            player2.append(arr[i])
            if check(player2):
                answer = 2
                break
    print(f"#{test_case} {answer}")