def divided_person(i,j): # i번부터 j번까지 속한 그룹을 나눠버린다
if i == j: return i # 한명 남았다 => 모든 가위바위보가 완료됐다.
a = divided_person(i,(i+j)//2) # a그룹
b = divided_person((i+j)//2+1,j) # b그룹
return rsp(a,b) # a,b 중에 이긴 승자가 리턴된다.
def rsp(a,b): # 두 그룹간 가위바위보
if arr[a] == arr[b]: # 비길 때 a가 우선시 됨
return a
if arr[a]-arr[b] == 1 or arr[a] - arr[b] == -2:
return a # a가 이기는 상황
return b # a가 이길 상황이 안나왔기 때문
T = int(input())
for tc in range(1,T+1):
N = int(input())
arr = [0] + list(map(int, input().split())) # 인덱스 개수를 맞추기 위해 [0] 을 추가했음
print(f'#{tc} {divided_person(1,N)}')
실수한 부분
1. 그룹을 나누는 방식의 실패
def divided_person(i,j): # i번부터 j번까지 속한 그룹을 나눠버린다
if i == j: return i # 한명 남았다 => 모든 가위바위보가 완료됐다.
a = list(range((i+j)//2)) # 0 ~ (i+j) // 2
b = list(range((i+j)//2, N)) # (i+j) //2 +1 ~ N
print(i,j,a)
print(i,j,b)
if len(a) >= 2 and len(b) >= 2:
divided_person(*a)
divided_person(*b)
2. 단순 실수
가위 - 바위 했을 때 -2가 나와야 했는데 3으로 조건을 걸었음
def rsp(a,b): # 두 그룹간 가위바위보
if arr[a] == arr[b]: # 비길 때 a가 우선시 됨
return a
if arr[a]-arr[b] == 1 or arr[a] - arr[b] == 3: # 이 부분 왜 3으로했는지 모르겠음
return a # a가 이기는 상황
return b # a가 이길 상황이 안나왔기 때문def rsp(a,b): # 두 그룹간 가위바위보
if arr[a] == arr[b]: # 비길 때 a가 우선시 됨
return a
if arr[a]-arr[b] == 1 or arr[a] - arr[b] == 3:
return a # a가 이기는 상황
return b # a가 이길 상황이 안나왔기 때문
'알고리즘 문제풀이' 카테고리의 다른 글
Swea D2_1954 달팽이 Python (0) | 2024.02.15 |
---|---|
Swea D3_11883. 배열 최소합 Python 재귀,백트래킹 (0) | 2024.02.14 |
Swea D2_11878.forth (1) | 2024.02.14 |
Swea D3_11879. 미로 Python (1) | 2024.02.14 |
Swea D4_1224.계산기3 Python (0) | 2024.02.14 |