Algorithm

SWEA 11454 Baby-gin Game (python)

광보기 2021. 4. 20. 17:52
반응형

11454. Baby-gin Game

D2

비슷한 문제

2021.04.20 - [분류 전체보기] - SWEA 5203 베이비진 게임 (python)

문제

0~9 사이의 숫자 카드에서 임의의 카드 6장을 뽑았을 때
3장의 카드가 연속적인 번호를 갖는 경우를 run이라 하고
3장의 카드가 동일한 번호를 갖는 경우를 triplet이라고 한다.

그리고, 6장의 카드가 run과 triplet으로만 구성된 경우를 baby-gin으로 부른다.

6자리의 숫자를 입력 받아 baby-gin 여부를 판단하는 프로그램을 작성하라.
(baby-gin 일 경우 1, 아닌 경우 0 을 출력한다.)

[입력]
T
카드목록1
...
카드목록T

[출력]
# 1 {답}
...
# T {답}

풀이

T = int(input())

def check_babygin(numbers):
    # counter = [0 for _in range(10)]
    counter = [0]*10

    #  babygin 체크
    is_babygin = 0

    # 카드 장수 세는 과정?
    for number in numbers:
        # 숫자에 해당하는 인덱스에 각각 더해줌
        counter[number] += 1

    # counter 만큼 돌면서 체크
    # for idx in range(len(counter)):

    #
    idx = 0
    while idx < len(counter):
        # triplet check
        if counter[idx]>=3:
            # 카드 세장 버리기
            counter[idx] -= 3
            # babygin 한걸음 다가가기
            is_babygin += 1

            # 숫자가 있는 한 계속 돌게 만들기 위해서 continue 삽입
            continue

        # run check
        # 8,9는 확인할 필요가 없음(뒤에 카드가 없기 때문에)
        if idx < 8:
            if counter [idx] and counter [idx+1] and counter[idx+2]:
                # 연속되는 카드 세장 하나씩 버리기
                counter[idx] -= 1
                counter[idx+1] -= 1
                counter[idx+2] -= 1
                # 베이비진에 한걸음 다가가기
                is_babygin += 1
                # run 역시 두번 체크하기 위한 컨티뉴
                continue


        # 중간 계산 중에 베이비진이 등장 했다면
        if is_babygin == 2:
            return 1

        #  검증하고 나면 다음 idx로 넘어가기
        idx += 1

    #전부 돌때까지 베이비진이 등장하지 않았다면
    if is_babygin !=2:
        return 0


for tc in range(1, T+1):
    numbers = list(map(int, input()))
    # 0 과 1이 나오게 해야한다. (함수에서)
    result =  check_babygin(numbers)

    print("#{} {}".format(tc, result ))
반응형