For Programmer

백준 2600번 파이썬 문제풀이(구슬게임) - DP(탑다운) 본문

코팅테스트/백준 문제 모음

백준 2600번 파이썬 문제풀이(구슬게임) - DP(탑다운)

유지광이 2022. 4. 10. 23:32
728x90


def win(p, q):
    # 이미 계산된 적 있으면 해당 결과를 리턴
    if dp[p][q] >= 0:
        return dp[p][q]

    # p에 있는 구슬들을 우선 뺀다.
    for i in range(3):
        if b[i] <= p and not win(p - b[i], q):
            dp[p][q] = 1  # 해당 플레이어 승리 저장
            return dp[p][q]  # 승리를 리턴

    # 그 후 q에 있는 구슬들을 뺀다.
    for j in range(3):
        if b[j] <= q and not win(p, q - b[j]):
            dp[p][q] = 1  # 해당 플레이어 승리 저장
            return dp[p][q]  # 승리를 리턴

    # 구슬을 뺄 수 없다면 패배이기 때문에 해당 플레이어에 0을 대입
    dp[p][q] = 0
    return dp[p][q]  # 패배를 리턴


# dp[p][q] = 구슬이 한 통에는 p개, 한 통에는 q개 있을 때 이길 수 있는지.
# A의 차례는 1, B의 차례는 0
dp = [[-1 for _ in range(501)] for _ in range(501)]
b = list(map(int, input().split()))
for _ in range(5):
    k1, k2 = map(int, input().split())
    if win(k1, k2):
        print("A")
    else:
        print("B")

 

728x90
Comments