반응형
SWEA Learning Club Stack2 6차시 문제
토너먼트 카드게임 문제
재귀를 활용하여 조건에 맞게 나눈 후, 문제 요구사항대로 짜가면 되는 문제
100% 내 생각으로 풀었는가?
→ X
문제에 대해 정확히 이해를 못해서 접근하기 어려웠던 점도 있고, 2개로 함수를 나눠서 풀면 쉽겠다는 접근을 생각하지 못했다.
정답코드
T = int(input())
def game(a,b):
if card[a] == card[b]: #카드가 같으면
return [min(a , b)] #번호 더 작은 쪽이 win
elif abs(card[a] - card[b]) == 1: # a랑 b랑 차이가 1이면
return [a] if card[a] > card[b] else [b] # a의 카드 숫자가 더크면 win a 아니면 b win
elif abs(card[a] - card[b]) == 2: # a랑 b랑 차이가 2이면
return [a] if card[a] < card[b] else [b] # a의 카드 숫자가 더작으면 win 아니면 b win
def group(n):
if len(n) == 1: # 1개가 되면
return n #n 반환
middle = (len(n)-1) // 2 + 1 #조건대로 쪼개기
group1 = n[:middle] #좌측 그룹
group2 = n[middle:] #우측 그룹
group1 = group(group1) #다시 좌측 그룹을 2개로 쪼개기
group2 = group(group2) #다시 우측 그룹을 2개로 쪼개기
return game(group1[0], group2[0]) #쪼개진 그룹을 게임 시켜 반환
for case in range(1,T+1):
N = int(input())
card = list(map(int, input().split()))
x = [i for i in range(N)] #각 학생 번호
print(f'#{case} {group(x)[0]+1}')
조건의 정확한 뜻이 짝수의 경우는 상관없는데 홀 수 일경우 왼쪽 > 오른쪽이게 가운데를 분할한 후에 다시 양쪽을 분할 하고, 각 인원이 1명이 되게 토너먼트 식 느낌으로 구성하라는 뜻이었다. 이말을 먼저 이해하지 못해서 구성하는데 너무 어려움을 겪었다.
대충 이런 구조가 되게 토너먼트를 구성하란 뜻
느낀점
가끔 백준도 그렇고 SWEA도 그렇고 문제 자체의 말을 이해 못해서 접근조차 못하는 경우가 요즘 늘어난거같다. 무엇보다 이 문제는 그림그려놓은것 처럼 쪼개라는 말만 이해한다면 쉽게 접근할 수 있는 문제였던거 같은데 그러지 못한게 너무 아쉬웠다. 다른사람의 코드를 참고하면서 그제서야 아! 이렇게 하란 뜻이구나 하고 뒤늦게 이해버렸다.
여러모로 아쉬움이 남는 문제😥
반응형
'알고리즘 풀이 > SW Expert Academy' 카테고리의 다른 글
[SWEA] 이진탐색(tree 문제) (python) (0) | 2023.02.22 |
---|---|
[SWEA] subtree (python) (0) | 2023.02.22 |
[SWEA] 배열 최소 합 (python) (0) | 2023.02.16 |
[SWEA 1222] 계산기1 (python) (0) | 2023.02.15 |
[SWEA 1234] 비밀번호(python) (0) | 2023.02.13 |
댓글