카드를 하나씩 추가해가며 검토하는 코드
# 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 |