Baby gin game
- 0 ~ 9 사이의 숫자 카드에서 임의의 카드 여섯 장을 뽑았을 때, 3장의 카드가 연속적인 번호를 갖는 경우를 run 이라고 하고, 3장의 카드가 동일한 번호를 갖는 경우를 triplet 이라고 한다. 이 때, 6장의 카드가 run과 triplet 으로만 구성된 경우를 baby-gin 이라고 한다.
- 6자리의 숫자를 입력 받아 baby-gin 여부를 판단하는 코드를 작성해보자
# greedy 로 접근
cards = [6, 6, 6, 6, 8, 9]
# counts 배열 만들기
counts = [0] * 12 # run 을 확인하기 위한 조건에서 IndexError 를 방지하기 위해 리스트의 우측에 0값 2개를 패딩
for card in cards:
counts[card] += 1
# counts 배열을 돌며 triplet, run 확인
triplet = run = 0
# counts 의 값을 한 번씩만 순회하는 것이 아니기 때문에, while 문을 사용
idx = 0
while idx < 10:
# triplet 여부 확인
if counts[idx] >= 3:
counts[idx] -= 3
triplet += 1
continue
# run 여부 확인
if (counts[idx] and counts[idx + 1] and counts[idx + 2]) >= 1:
run += 1
counts[idx] -= 1
counts[idx + 1] -= 1
counts[idx + 2] -= 1
continue
# 위의 조건에 걸리면 인덱스 값은 그대로
idx += 1
result = 'baby-jin!' if triplet + run == 2 else 'lose'
print(result)
댓글