KEEP GOING

[python] SWEA 5203 : 베이비진 게임 본문

code review/greedy

[python] SWEA 5203 : 베이비진 게임

jmHan 2022. 2. 11. 15:15
반응형

https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do?courseId=AVuPDYSqAAbw5UW6&subjectId=AWUYEGw61n8DFAVT&lectureSeq=8&contestProbId=AWT-MRHKchIDFAVT&kataId= 

 

SW Expert Academy

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

swexpertacademy.com

 

 

1. 코드 구현

def isRun(arr):
    tmp = sorted(arr)
    n = len(arr)
    for i in range(0, n-2):
        # 반례) 4 5 5 6
        # if tmp[i] == (tmp[i+1] - 1) and tmp[i] == (tmp[i+2] - 2):
        if (tmp[i]+1) in tmp and (tmp[i]+2) in tmp:
            return True
    return False


def isTriplet(arr):
    n = len(arr)
    for i in range(n):
        count = arr.count(arr[i])
        if count >= 3:
            return True
    return False


T = int(input())
for tc in range(1, T+1):
    result = 0
    cards = list(map(int, input().split()))
    player1 = []
    player2 = []
    for i in range(0, 12, 2):
        player1.append(cards[i])
        player2.append(cards[i+1])
    # 먼저 run이나 triplet되는 경우 승리
    for i in range(4):
        result1 = isRun(player1[:i+3]) or isTriplet(player1[:i+3])
        if result1:
            result = 1
            break
        result2 = isRun(player2[:i+3]) or isTriplet(player2[:i+3])
        if result2:
            result = 2
            break
    print(f"#{tc} {result}")

숫자카드로 [1,2,9,8,3]을 받았을 때 1, 2, 3은 연속된 숫자이기에 run이 되어 승리한다.

주석한 것처럼 구현하면 [1,4,5,5,6]을 카드로 받았을 때 정렬된 숫자는 1,4,5,5,6이 되므로 run이지만 run을 리턴할 수 없다. 여기서 문제가 발생해서 애를 먹었다.

if (tmp[i]+1) in tmp and (tmp[i]+2) in tmp 와 같은 조건문으로 필터링하여 문제를 해결할 수 있었다. 

처음부터 player1과 player2의 숫자 카드 리스트를

player1 = [0 for _ in range(10)]

player2 = [0 for _ in range(10)]  

와 같이 구현하여 숫자 0~9에 대해 인덱스로 접근할 수 있도록 하였다면 더 깔끔한 코드가 되었을 것이다. 

반응형

'code review > greedy' 카테고리의 다른 글

[python] 백준 2437번 : 저울  (0) 2022.03.02
[python] SWEA : 컨테이너 운반  (0) 2022.02.11
[python] 백준 10610 : 30  (0) 2022.02.10
[python] SWEA 5202 : 화물 도크  (0) 2022.02.08
[python] 백준 15486 번 : 퇴사2  (0) 2022.01.26
Comments