코딩테스트/SWExpertAcademy

베이비진 게임 Python(SW Expert Academy, SWEA)

멍토 2020. 5. 22.

난이도 : D3

문제번호 : 5023

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDYSqAAbw5UW6&subjectId=AWUYEGw61n8DFAVT#

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

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는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

예시

입력 출력
3
9 9 5 6 5 6 1 1 4 2 2 1
5 3 2 9 1 5 2 0 9 2 0 0
2 8 7 7 0 2 2 2 5 4 0 3
#1 0
#2 1
#3 2

2. 문제풀이

카운팅을 이용하여 문제를 풀었다.

카드를 획득할때마다 몇번 카드가 몇장있다 라고 리스트에 체크를 한뒤에

카드를 선택했을때 선택한 카드기준으로 확인한다.

이전에 완성이 되지 않았었다면 내가 놓은 위치의 양옆 혹은 자기자신을 제외하고는 완성이 될 수 없다.

추가한 카드의 수가 3장이 되었거나 양쪽에 카드가 1장씩 있다면 결과를 출력한다.

주의해야 할점은 제일왼쪽에 놓았다면 우측에 2칸을

제일 오른쪽에 놓았다면 왼쪽에 2칸을 확인해야 한다.


3. 소스코드

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
34
35
36
37
38
39
40
41
42
43
44
#D3 5203 베이비진 게임
 
#우승자가 나왔는지 체크
def card_check(number, index):
    global answer
    #플레이어 캐스팅하기
    if number & 1:
        player = player1
    else:
        player = player2
    #카드가 3장이라면
    if  player[index] == 3 :
        answer = number
    #카드가 8보다 작다면 자신기준으로 우측확인
    if index < 8 and player[index] and player[index+1and player[index+2]:
        answer = number
    #카드가 1보다 크다면 자신기준으로 좌측확인
    if index > 1 and player[index] and player[index-1and player[index-2]:
        answer = number
    #양쪽으로 1개씩 볼수있다면 자신기준으로 양쪽확인
    if 0 < index < 9 and player[index-1and player[index] and player[index+1]:
        answer = number
 
for t in range(int(input())):
    answer = 0
    player1 = [0 for _ in range(10)]
    player2 = [0 for _ in range(10)]
    card_list = list(map(int, input().split()))
    for i in range(12):
        #2번 유저라면
        if i & 1:
            #카드얻은거 표시해주고
            player2[card_list[i]] += 1
            #체크
            card_check(2, card_list[i])
        # 1번 유저라면
        else:
            #카드얻은거 표시해주고
            player1[card_list[i]] += 1
            # 체크
            card_check(1, card_list[i])
        #우승자가 정해졌다면 반복문 중지
        if answer: break
    print('#{} {}'.format(t+1, answer))

 

댓글

💲 광고입니다.