카드를 하나씩 추가해가며 검토하는 코드
# babygin인지 확인하는 함수
def is_babygin(p_cards, n):
for i in range(n-2):
if p_cards[i] + 1 in p_cards and p_cards[i] + 2 in p_cards: # run 인가요 ?
return True
elif p_cards[i] == p_cards[i+1] == p_cards[i+2]: # triplet 인가요?
return True
return False # 암것도 아니야
for idx in range(1, int(input())+1):
cards = list(map(int, input().split()))
player1 = []
player2 = []
answer = 0
for i in range(0, 12, 2):
player1.append(cards[i])
player2.append(cards[i + 1])
if 4 <= i:
# player1 카드 검토
if is_babygin(sorted(player1), i//2+1):
answer = 1 # triplet이나 run 됐으면 갱신하고 승자 출력
break
# player2 카드 검토
if is_babygin(sorted(player2), i//2+1):
answer = 2
break
print('#{} {}'.format(idx, answer)) # 둘다 babygin 되지 못했으면 0(무승부) 출력
인덱스를 활용하여 해결하는 코드
# run인지 확인하는 함수
def is_run(p_cards):
for i in range(8):
if p_cards[i] > 0 and p_cards[i+1] > 0 and p_cards[i+2] > 0: # 연속된 세 자리에 각 카드가 하나 이상 있나요?
return True
return False # run 아니야
for idx in range(1, int(input())+1):
cards = list(map(int, input().split()))
player1 = [0 for _ in range(10)]
player2 = [0 for _ in range(10)]
answer = 0
for i in range(0, 12, 2):
player1[cards[i]] += 1 # 해당 인덱스에 +1
player2[cards[i+1]] += 1
if 4 <= i:
# player1 카드 검토
if player1[cards[i]] == 3 or is_run(player1): # triplet이나 run 됐으면 갱신하고 승자 출력
answer = 1
break
# player2 카드 검토
if player2[cards[i+1]] == 3 or is_run(player2):
answer = 2
break
print('#{} {}'.format(idx, answer)) # 둘다 babygin 되지 못했으면 0(무승부) 출력
'Algorithm > SW Expert Academy' 카테고리의 다른 글
[Python] 5205. 퀵 정렬 (0) | 2021.10.07 |
---|---|
[Python] 5204. 병합 정렬 (0) | 2021.10.07 |
[Python] 5202. 화물도크 (0) | 2021.10.05 |
[Python] 5201. 컨테이너운반 (0) | 2021.10.05 |
[Python] 5189. 전자카트 (0) | 2021.10.03 |