Hikenny25

24460 - 특별상이라도 받고 싶어 본문

baekjoon (solved.ac)/baekjoon ONLY

24460 - 특별상이라도 받고 싶어

hikenny 2023. 12. 12. 15:46

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

 

24460번: 특별상이라도 받고 싶어

첫 번째 줄에는 정수 $N$이 주어진다. (단, $N = 2^m$, $0 \le m \le 10$, $m$은 정수) 두 번째 줄부터 $N$개 줄의 $i$번째 줄에는 $i$번째 줄에 있는 의자에 적힌 추첨번호가 주어진다. 각 줄에는 $N$개의 추첨

www.acmicpc.net

 

- 분할정복법

 

def flatten(arr):
    return arr[0][:] + arr[1][:]

def get_second_min(arr):
    arr = sorted(arr)
    return arr[1]

def divide(arr):
    if len(arr) == 2:
        return [get_second_min(flatten(arr))]
    
    l = len(arr) // 2
    divided_array = list()

    for i in [0, l]:
        for j in [0, l]:
            divided_array.append([row[j:j+l] for row in arr[i:i+l]])
    
    for i in range(4):
        divided_array[i] = divide(divided_array[i])
    
    last_array = [divided_array[i][0] for i in range(4)]
    return [get_second_min(last_array)]

n = int(input())
number = [list(map(int, input().split())) for _ in range(n)]

if n == 1:
    print(number[0][0])
    exit()

print(divide(number)[0])

 

SWEA 5일차 - 토너먼트 카드게임과 같은 분할정복법으로 푸는 문제이다!!!

응용해서 풀어보앗다 어느정도 이해가 되는듯ㅎ

Comments