# 3. APS/SWEA

SWEA # Python_D2_11454_Baby-gin Game

둥굴둥굴둥굴레차 2021. 2. 16. 01:41

 

 

🎭 [문제]

 

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

 

 

SW Expert Academy

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

swexpertacademy.com

 

[input]
3
667767
054060
101123

[output]
#1 1
#2 1
#3 0
## def함수와 while문 사용한 버전

import sys
sys.stdin = open("input.txt")

T = int(input())

def check_babygin(numbers):
    # counter = [0] * 10
    counter = [0 for _ in range(10)]
	# babygin이었을 때 갯수 세어주기 위해 변수 설정
    is_babysin = 0
	
    # 예를들어, 숫자 6이 들어오면 6번째 counter의 인덱스에 +1
    for number in numbers: 
        counter[number] += 1
   
    idx = 0
    while idx < len(counter):
        # triplet 체크해주기
        if counter[idx] >= 3:
            # triplet인 카드를 체크해준 후 3장 버려주기
            counter[idx] -= 3
            is_babysin += 1
            continue

        # run 체크해주기
        # 아래에 비교해주는 idx가 +2니까 8 이전까지만!
        if idx < 8:
            if counter[idx] and counter[idx+1] and counter[idx+2]:
                # run체크 해준 후 해당 카드 3장 버리기
                counter[idx] -= 1
                counter[idx+1] -= 1
                counter[idx+2] -= 1
                is_babysin += 1
                continue

        # 만약 triple하나 run하나로 인해 2가 채워지면 return 1!
        if is_babysin == 2:
            return 1
        idx += 1

    if is_babysin != 2:
        return 0

for tc in range(1, T+1):
    numbers = list(map(int, input()))
    result = check_babygin(numbers)
    print("#{} {}".format(tc, result))

## for문만 사용한 버전

import sys
sys.stdin=open("input.txt")


T = int(input())

for tc in range(1, T+1):
    zero_list = [0 for _ in range(10)]
    numbers = input()
    it_is_baby_gin = 0

    # 숫자 카운트 증가
    for i in numbers:
        zero_list[int(i)] += 1

    # 같은게 3개이면 + 1
    for j in range(len(zero_list)):
        # 만약 전부다 같아서 6이면 베이비진 = 2
        if zero_list[j] == 6:
            it_is_baby_gin = 2
            break
        
        if 3 <= zero_list[j] < 6:
            it_is_baby_gin += 1
            zero_list[j] -= 3

    # 만약 베이비진=2가 아니면
    if it_is_baby_gin != 2:
        # 연속해서 있는 경우 베이비진 + 1
        for k in range(len(zero_list)-2):
            # 만약 1231232인 경우
            if zero_list[k] == 2 and zero_list[k+1] == 2 and zero_list[k+2] == 2:
                it_is_baby_gin = 2
                break
            # 아닌 경우
            if 0 < zero_list[k] and 0 < zero_list[k+1] and 0 < zero_list[k+2]:
                it_is_baby_gin += 1
                zero_list[k] -= 1
                zero_list[k+1] -= 1
                zero_list[k+2] -= 1

    # 베이비진이 2면 1, 아니면 0 출력
    if it_is_baby_gin == 2:
        print("#{} {}".format(tc, 1))
    else:
        print("#{} {}".format(tc, 0))


 


 

🍦 [복습]

 

# 1. 210224

 if 0 < zero_list[k] and 0 < zero_list[k + 1] and 0 < zero_list[k + 2]:
                it_is_baby_gin += 1
                zero_list[k] -= 1
                zero_list[k + 1] -= 1
                zero_list[k + 2] -= 1

요 부분 주의하자!

run을 판별해낼 때 사용한 코드인데, 내가 자꾸  == 1 으로 적어버린다.

 

# 2. 210225

 

이번에도 == 1로 적어버렸다.. (#`-_ゝ-)

 

# 1. 210301

 

이번엔 위의 실수들을 하지 않았으나, babygin 판별 후 각 원소의 갯수를 빼주는 것을 까먹었었다..