😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[BAEKJOON python] 14888_μ—°μ‚°μž λΌμ›Œλ„£κΈ° λ³Έλ¬Έ

πŸ¦₯ μ½”ν…Œ/BAEKJOON

[BAEKJOON python] 14888_μ—°μ‚°μž λΌμ›Œλ„£κΈ°

μ§•μ§•μ•ŒνŒŒμΉ΄ 2022. 10. 9. 23:59
728x90
λ°˜μ‘ν˜•
N개의 수둜 이루어진 μˆ˜μ—΄ A1, A2, ..., AN이 주어진닀.
μˆ˜μ™€ 수 사이에 λΌμ›Œλ„£μ„ 수 μžˆλŠ” N-1개의 μ—°μ‚°μžκ°€ 주어진닀.
μ—°μ‚°μžλŠ” λ§μ…ˆ(+), λΊ„μ…ˆ(-), κ³±μ…ˆ(×), λ‚˜λˆ—μ…ˆ(÷)으둜만 이루어져 μžˆλ‹€.
μˆ˜μ™€ 수 사이에 μ—°μ‚°μžλ₯Ό ν•˜λ‚˜μ”© λ„£μ–΄μ„œ, μˆ˜μ‹μ„ ν•˜λ‚˜ λ§Œλ“€ 수 μžˆλ‹€. μ΄λ•Œ, 주어진 수의 μˆœμ„œλ₯Ό λ°”κΎΈλ©΄ μ•ˆ λœλ‹€.

예λ₯Ό λ“€μ–΄, 6개의 μˆ˜λ‘œ 이루어진 μˆ˜μ—΄μ΄ 1, 2, 3, 4, 5, 6이고, 주어진 μ—°μ‚°μžκ°€ λ§μ…ˆ(+) 2개, λΊ„μ…ˆ(-) 1개, κ³±μ…ˆ(×) 1개, λ‚˜λˆ—μ…ˆ(÷) 1개인 κ²½μš°μ—λŠ” 총 60κ°€μ§€μ˜ μ‹μ„ λ§Œλ“€ 수 μžˆλ‹€
μ‹μ˜ 계산은 μ—°μ‚°μž μš°μ„  μˆœμœ„λ₯Ό λ¬΄μ‹œν•˜κ³  μ•žμ—μ„œλΆ€ν„° 진행해야 ν•œλ‹€.
λ‚˜λˆ—μ…ˆμ€ μ •μˆ˜ λ‚˜λˆ—μ…ˆμœΌλ‘œ λͺ«λ§Œ μ·¨ν•œλ‹€. 음수λ₯Ό μ–‘μˆ˜λ‘œ λ‚˜λˆŒ λ•ŒλŠ” μ–‘μˆ˜λ‘œ λ°”κΎΌ λ’€ λͺ«μ„ μ·¨ν•˜κ³ , κ·Έ λͺ«μ„ 음수둜 λ°”κΎΌ 것

N개의 μˆ˜μ™€ N-1개의 μ—°μ‚°μžκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, λ§Œλ“€ 수 μžˆλŠ” μ‹μ˜ κ²°κ³Όκ°€ μ΅œλŒ€μΈ 것과 μ΅œμ†ŒμΈ 것을 κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

첫째 쀄에 수의 개수 N(2 ≤ N ≤ 11)κ°€ 주어진닀. λ‘˜μ§Έ μ€„μ—λŠ” A1, A2, ..., AN이 주어진닀.
(1 ≤ Ai ≤ 100) μ…‹μ§Έ μ€„μ—λŠ” 합이 N-1인 4개의 μ •μˆ˜κ°€ μ£Όμ–΄μ§€λŠ”λ°, μ°¨λ‘€λŒ€λ‘œ λ§μ…ˆ(+)의 개수, λΊ„μ…ˆ(-)의 개수, κ³±μ…ˆ(×)의 개수, λ‚˜λˆ—μ…ˆ(÷)의 개수

첫째 쀄에 λ§Œλ“€ 수 μžˆλŠ” μ‹μ˜ 결과의 μ΅œλŒ“κ°’μ„, λ‘˜μ§Έ μ€„μ—λŠ” μ΅œμ†Ÿκ°’μ„ 좜λ ₯
μ—°μ‚°μžλ₯Ό μ–΄λ–»κ²Œ λΌμ›Œλ„£μ–΄λ„ 항상 -10얡보닀 ν¬κ±°λ‚˜ κ°™κ³ , 10얡보닀 μž‘κ±°λ‚˜ 같은 κ²°κ³Όκ°€ λ‚˜μ˜€λŠ” μž…λ ₯만 주어진닀.
μ•žμ—μ„œλΆ€ν„° κ³„μ‚°ν–ˆμ„ λ•Œ, 쀑간에 κ³„μ‚°λ˜λŠ” μ‹μ˜ 결과도 항상 -10얡보닀 ν¬κ±°λ‚˜ κ°™κ³ , 10얡보닀 μž‘κ±°λ‚˜ κ°™λ‹€.
N = int(input())
num = list(map(int, input().split()))
calc = list(map(int, input().split()))  # + 1 x %

max_value = -1e9
min_value = +1e9

def dfs(n, value) :
    global num, calc, max_value, min_value

    if n == N :
        max_value = max(max_value, value)
        min_value = min(min_value, value)
    
    else :
        if calc[0] > 0 :
            calc[0] -= 1
            dfs(n + 1, value + num[n])
            calc[0] += 1    # μ•„λ‹μˆ˜λ„ μžˆμœΌλ‹ˆ 원상 볡귀
        if calc[1] > 0 :
            calc[1] -= 1
            dfs(n + 1, value - num[n])
            calc[1] += 1    # μ•„λ‹μˆ˜λ„ μžˆμœΌλ‹ˆ 원상 볡귀            
        if calc[2] > 0 :
            calc[2] -= 1
            dfs(n + 1, value * num[n])
            calc[2] += 1    # μ•„λ‹μˆ˜λ„ μžˆμœΌλ‹ˆ 원상 볡귀            
        if calc[3] > 0 :
            calc[3] -= 1
            dfs(n + 1, int(value / num[n]))
            calc[3] += 1    # μ•„λ‹μˆ˜λ„ μžˆμœΌλ‹ˆ 원상 볡귀            

dfs(1, num[0])

print(max_value)
print(min_value)

# input
# 3
# 3 4 5
# 1 0 1 0

# outpu
# 35
# 17
728x90
λ°˜μ‘ν˜•
Comments