asdf
# 가위바위보 (1: 가위, 2: 바위, 3: 보)
def game(c1, c2):
# 가위바위보 버전 1
# c1이 이겼을 경우 혹은 비겼을 경우(c1이 인덱스가 작으므로 c1 반환)
if cards[c1] == cards[c2] or cards[c1] % 3 == (cards[c2] + 1) % 3:
return c1
# c2가 이겼을 경우
return c2
# 가위바위보 버전 2
# if (cards[c1] - cards[c2]) % 3 == 2:
# return c2
# return c1
# 가위바위보 버전 3
# if cards[c1] == 1:
# return c2 if cards[c2] == 2 else c1
# elif cards[c1] == 2:
# return c2 if cards[c2] == 3 else c1
# else:
# return c2 if cards[c2] == 1 else c1
# 토너먼트(시작 지점, 끝 지점)
# (자기 자신 밖에 없어서) 대결할 사람이 없을 때까지 토너먼트한다.
def tournament(s, e):
# 대결할 사람 없으면(한 명일 때) 현재 인덱스(s) 반환
if s == e:
return s
m = (s + e) // 2 # 중간 지점 구하기 예) [1, 2, 3] s = 0 e = 2
g1 = tournament(s, m) # 중간기준 앞 그룹 토너먼트 하기 [1, 2] s = 0, e = 1 -> [1] s = 0, e = 0 -> 0 / [2] s = 1, e = 1 -> 1
g2 = tournament(m+1, e) # 중간기준 뒤 그룹 토너먼트 하기 [3] -> s = e = 2 -> 2 (cards[2] = 3)
return game(g1, g2) # 가위바위보하기
tc = int(input())
for idx in range(1, tc+1):
n = int(input())
cards = list(map(int, input().split()))
print('#{} {}'.format(idx, tournament(0, n-1)+1)) # 카드는 1부터 시작이므로 +1 해주기
'Algorithm > SW Expert Academy' 카테고리의 다른 글
[Python] 1225. 암호생성기 (0) | 2021.09.23 |
---|---|
[Python] 4881. 배열 최소합 (0) | 2021.09.21 |
[Python] 4875. 미로 (0) | 2021.09.21 |
[Python] 4874. Forth (0) | 2021.09.21 |
[Python] 1224. 계산기3 (0) | 2021.09.21 |