SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
[문제]
0부터 9까지인 숫자 카드 4세트를 섞은 후 6개의 카드를 골랐을 때, 연속인 숫자가 3개 이상이면 run, 같은 숫자가 3개 이상이면 triplet이라고 한다.
게임을 시작하면 플레이어1과 플레이어 2가 교대로 한 장 씩 카드를 가져가며, 6장을 채우기 전이라도 먼저 run이나 triplet이 되는 사람이 승자가 된다.
두 사람이 가져가게 되는 순서대로 12장의 카드에 대한 정보가 주어졌을 때 승자를 알아내는 프로그램을 작성하시오. 만약 무승부인 경우 0을 출력한다.
예를 들어 9 9 5 6 5 6 1 1 4 2 2 1인 경우, 플레이어 1은 9, 5, 5, 1, 4, 2카드를, 플레이어2는 9, 6, 6, 1, 2, 1을 가져가게 된다.
이때는 카드를 모두 가져갈 때 까지 run이나 triplet이 없으므로 무승부가 된다.
[입력]
첫 줄에 테스트케이스의 수 T가 주어진다. 1<=T<=50
다음 줄부터 테스트 케이스의 별로 각 줄에 0에서 9사이인 12개의 숫자가 주어진다.
[출력]
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.
[풀이]
input을 nums 리스트에 저장한 후, 각각 번갈아가면서 A, B 리스트에 넣어준다.
그리고 총 6번의 검증 타이밍이 생기므로 6번동안 반복하면서,
각각의 A, B 리스트에 베이비진 게임의 승리조건이 될때 return값을 받아와서
승리 조건을 달성시 break하고, 승자를 발표한다.
- 승리조건 1 : 어떤 숫자가 3개이상 존재한다 -> list.count 가 3이상일때
- 승리조건 2 : 어떤 숫자 3개가 연속한다. -> 특정 index값이 기준일때 3개가 연속하는 케이스는 3가지가 있다.
- (x-1, x, x+1) / (x, x+1, x+2) / (x, x-1, x-2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# SWEA 베이비진
from collections import deque
def check():
if len(A) < 3:
return 0
else:
for i in range(len(A)):
if A.count(A[i]) >= 3:
return 1
elif ((A.count(A[i]-1) > 0) and (A.count(A[i]-2) > 0)) or ((A.count(A[i]-1) > 0) and (A.count(A[i]+1) > 0)) or ((A.count(A[i]+1) > 0) and (A.count(A[i]+2) > 0)):
return 1
if B.count(B[i]) >= 3:
return 2
elif ((B.count(B[i]-1) > 0) and (B.count(B[i]-2) > 0)) or ((B.count(B[i]-1) > 0) and (B.count(B[i]+1) > 0)) or ((B.count(B[i]+1) > 0) and (B.count(B[i]+2) > 0)):
return 2
return 0
T = int(input())
for t in range(1, T+1):
nums = deque(map(int, input().split()))
A = []
B = []
for _ in range(6):
A.append(nums.popleft())
B.append(nums.popleft())
#print(A, B)
ans = check()
if ans > 0:
break
print('#%d %d' %(t, ans))
|
cs |
'알고리즘' 카테고리의 다른 글
[파이썬 | BOJ | 14890] 경사로 (0) | 2020.04.23 |
---|---|
[파이썬 | BOJ | 12100] 2048 (0) | 2020.04.23 |
[파이썬 | SW Expert Academy] 화물 도크 (0) | 2020.04.23 |
[파이썬 | SW Expert Academy] 컨테이너 운반 (0) | 2020.04.23 |
[파이썬 | BOJ | 10815] 숫자 카드 (0) | 2020.04.22 |