Baby-gin Game
24 Feb 2019 | Algorithm문제
- 각 카드는 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