브루트포스 - 14888번: 연산자 끼워넣기

jisu_log·2025년 6월 12일

알고리즘 문제풀이

목록 보기
40/105


n = int(input())
nums = list(map(int, input().split()))
tools = list(map(int, input().split()))

all_tool = []
for i in range(4):
    for count in range(tools[i]):
        all_tool.append(i)

# + - x //
# 0 1 2 3

# 순열 구하기
def permutation(arr):
    result = []

    def dfs(path, used):
        if len(path) == len(arr):
            result.append(tuple(path)) # 이후에 set으로 변환해서 중복 제거해야 하므로 tuple로 저장해야 함!(hashable)
            return
        for i in range(len(arr)):
            if i not in used:
                dfs(path + [arr[i]], used.union({i}))
    
    dfs([], set())
    return result

# 중복 요소가 있으므로 중복 경우의 수 제거
cases = set(permutation(all_tool))

min_val = float('inf') # 무한대로 초기 설정
max_val = float('-inf')


for case in cases:
    res = nums[0]
    for i in range(1, n):
        if case[i - 1] == 0: # +
            res += nums[i]
        
        elif case[i - 1] == 1: # -
            res -= nums[i]

        elif case[i - 1] == 2: # *
            res *= nums[i]
        
        else: # //
            if res < 0: # 예외상황 처리
                res = -(-res // nums[i])
            else:
                res = res // nums[i]
    
    # 값 갱신
    max_val = max(max_val, res)
    min_val = min(min_val, res)
        

print(max_val)
print(min_val)

0개의 댓글