본문 바로가기
Algorithm(CodeTree, Python)/Backtracking

[코드트리] 수들 중 최솟값 최대화하기 Python

by kurooru 2023. 2. 7.
# n 입력
n = int(input())
# grid 입력
grid = [
    list(map(int, input().split()))
    for _ in range(n)
]

# 함수들
# get_max_min(curr_comb)
def get_max_min(curr_comb):
    # curr_min
    curr_min = 10001

    # grid의 각 행을 돌면서
    for i in range(n):
        # curr_min update
        curr_min = min(curr_min, grid[i][curr_comb[i]])
    
    # 반환
    return curr_min

# simulate(curr_idx)
def simulate(curr_idx):
    # 전역 변수 선언
    global max_min
    
    # 종료조건
    if curr_idx == n:
        # max_min update
        max_min = max(max_min, get_max_min(comb))
        return
    # 넣어주기
    for i in range(n):
        if visited[i]:
            continue
        
        comb.append(i)
        visited[i] = True

        simulate(curr_idx + 1)

        comb.pop()
        visited[i] = False

# 설계
# max_min
max_min = 0

# comb, visited
comb, visited = [], [False for _ in range(n+1)]

# simulate()
simulate(0)

# 출력
print(max_min)