해리의 데브로그

(SW 문제해결 기본 - Stack2) SWEA 4880 - 토너먼트 카드게임

|

문제

  • SWEA 4880 - [S/W 문제해결 기본] Stack2 - 토너먼트 카드게임
  • 문제링크
  • 문제의 저작권은 SW Expert Academy에 있습니다.

나의 코드

def win(x, y):
    if (lst[x-1] == 1 and lst[y-1] == 3) or (lst[x-1] == 1 and lst[y-1] == 1):
        return x
    elif (lst[x-1] == 2 and lst[y-1] == 1) or (lst[x-1] == 2 and lst[y-1] == 2):
        return x
    elif (lst[x-1] == 3 and lst[y-1] == 2) or (lst[x-1] == 3 and lst[y-1] == 3):
        return x
    return y

def match(start, end):
    if start == end:
        return start

    first_value = match(start, (start+end)//2)
    second_value = match((start+end)//2+1, end)
    return win(first_value, second_value)

TC = int(input())

for tc in range(1, TC+1):
    N = int(input())
    lst = list(map(int, input().split()))
    start = 1
    end = N
    print(f'#{tc} {match(start, end)}')
  • DFS & backtracking을 사용하여 함수를 구현하는데 상당한 어려움이 있었던 문제였다. 지금까지 접한 문제는 마치 트리의 형태 처럼 하위 개념으로 재귀를 호출하는 구조였는데, 이 문제는 그 개념을 반대로 생각하여 접근하는 문제다보니 많이 생소하였다.

Comments