반응형
SWEA Learning Club Stack2 6차시 문제
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
토너먼트 카드게임 문제
재귀를 활용하여 조건에 맞게 나눈 후, 문제 요구사항대로 짜가면 되는 문제
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 |
댓글