해리의 데브로그

Baby-gin Game

|

문제

  • 각 카드는 0에서 9까지의 숫자가 쓰여져 있다.
  • 6장의 카드를 받는다.
  • 임의의 카드 6장 중, 3장의 카드가 연속적인 번호를 갖는 경우를 run이라 하며, 3장의 카드가 동일한 번호를 갖는 경우를 triplet 이라고 한다.
  • 6장의 카드가 run과 triplet로만 구성된 경우를 baby-gin으로 부른다.
  • 901은 run이 아니다.

  • 예시)
    • 667767은 두 개의 triplet이므로 baby-gin이다. (666,777)
    • 054060은 한 개의 run과 한 개의 triplet이므로 역시 baby-gin이다. (456, 000)
    • 101123은 한 개의 triplet가 존재하나, 023이 run이 아니므로 baby-gin이 아니다.
    • (123을 run으로 사용하더라도 011이 run이나 triplet가 아님)

나의 코드

  • 333333 같은 테스트 케이스의 경우 triple이 2개이므로 baby-jin이 되어야하나, 카운팅 배열 내에 갯수가 3개이상인지만 검증하고 그다음 숫자로 넘어가는 바람에 테스트 케이스를 만족하지 못하였다.
  • 그래서 continue를 사용하여 while문 처음으로 돌아가는 코드를 추가했다.
Data = list(map(int, input("입력하세요: ").split()))
N = len(Data)
cnt_lst = [0] * 12

for i in range(N):
    cnt_lst[Data[i]] += 1

result = run = triple = i = 0

while True:
    if cnt_lst[i] + cnt_lst[i + 1] + cnt_lst[i + 2] == 3:
        cnt_lst[i] -= 1
        cnt_lst[i + 1] -= 1
        cnt_lst[i + 2] -= 1
        run += 1
        continue

    if cnt_lst[i] >= 3:
        cnt_lst[i] -= 3
        triple += 1
        continue

    i += 1

    if i == 10:
        break

if run + triple == 2:
    print("baby jin")

else:
    print("failed")

Comments