본문 바로가기
문제 해결/BOJ

[백준] 원숭이 스포츠

by 자잘 2023. 3. 13.

https://www.acmicpc.net/problem/16438

 

16438번: 원숭이 스포츠

승민이는 동물원의 원숭이들을 관리하는 사육사입니다. 이 동물원에는 N마리의 원숭이들이 있고 원숭이들에게 1번부터 N번까지 번호를 붙였습니다. 7일간 동물원에서 원숭이들끼리 스포츠 경기

www.acmicpc.net

문제를 제대로 이해하지 못해서 조금 헤맸던 문제입니다. 이 문제의 포인트는 분할정복입니다. 절반으로 쪼개면서 현재 범위에서의 절반과 나머지 절반이 상대팀이 되도록 하면 됩니다. 예를 들어 n = 7일때, AAABBBB -> ABBAABB -> AABABAB순으로 팀을 나누어 주면 최소 한번은 다른 원숭이들과 상대팀이 될 수 있습니다. 7개의 팀 조합을 출력해야하므로 나머지 4개의 조합은 아무렇게나 출력해주면 됩니다.

 

import sys
from collections import deque

input = sys.stdin.readline

n = int(input())

cur = ['A'] * n

check = [
    [False] * n
    for _ in range(n)
]

ans = set()

def dq():
    q = deque([(0, n)])

    # 계속해서 반으로 쪼개면서 서로 상대팀이 되도록 한다.
    while q:
        for _ in range(len(q)):
            start, end = q.popleft()

            if end - start <= 1:
                continue

            mid = (start + end) // 2

            for i in range(start, mid):
                cur[i] = 'A'

            for i in range(mid, end):
                cur[i] = 'B'
            q.append((start, mid))
            q.append((mid, end))

        ans.add(''.join(cur))

dq()


for a in ans:
    print(a)

for _ in range(7 - len(ans)):
    print('A' + ('B' * (n - 1)))

'문제 해결 > BOJ' 카테고리의 다른 글

[백준] 거의 최단경로  (1) 2023.03.14
[백준] 양 구출 작전  (0) 2023.03.14
[백준] 괄호 추가하기  (0) 2023.03.11
[백준] 피리 부는 사나이  (0) 2023.03.10
[백준] 모양 만들기  (0) 2023.03.09