-
[λ°±μ€] 15658 μ°μ°μ λΌμλ£κΈ° (2) with PythonPS 2022. 2. 2. 17:56728x90λ°μν
π BOJ 15658 μ°μ°μ λΌμλ£κΈ° (2)
π‘ 쑰건
Nκ°μ μλ‘ μ΄λ£¨μ΄μ§ μμ΄ A1, A2, ..., AN
N(2 β€ N β€ 11), (1 β€ Ai β€ 100)μ λ ₯ κ°μ€ μ μ§Έ μ€μ 4Nλ³΄λ€ μκ±°λ κ°μ 4κ°μ μ μκ° μ£Όμ΄μ§λλ°,
μ°¨λ‘λλ‘ λ§μ (+)μ κ°μ, λΊμ (-)μ κ°μ, κ³±μ (Γ)μ κ°μ, λλμ (Γ·)μ κ°μμ΄λ€.μμ μ μ¬μ΄μ μ°μ°μλ₯Ό νλμ© λ£μ΄μ, μμμ νλ λ§λ€ μ μλ€. μ΄λ, μ£Όμ΄μ§ μμ μμλ₯Ό λ°κΎΈλ©΄ μ λλ€.
μμ κ³μ°μ μ°μ°μ μ°μ μμλ₯Ό 무μνκ³ μμμλΆν° μ§νν΄μΌ νλ€.
λλμ μ μ μ λλμ μΌλ‘ λͺ«λ§ μ·¨νλ€. λν μμλ₯Ό λλ λμλ μμλ‘ λ°κΎΌ λ€ λͺ«μ μ·¨νκ³ , κ·Έ λͺ«μ μμλ‘ λ°κΎΈμ΄μΌ νλ€.
λ°±νΈλνΉ, DFS μκ³ λ¦¬μ¦ μ νμ λ¬Έμ
π₯ μμ€ μ½λ
from sys import stdin, setrecursionlimit setrecursionlimit(10 ** 6) n = int(stdin.readline()) n_num = list(map(int, stdin.readline().split())) arr = list(map(int, stdin.readline().split())) def dfs(num, val): global max_res, min_res if not num: max_res = max(val, max_res) min_res = min(val, min_res) return else: for i in range(4): if i == 0: if arr[i] > 0: arr[i] -= 1 dfs(num[1:], val + num[0]) arr[i] += 1 else: continue if i == 1: if arr[i] > 0: arr[i] -= 1 dfs(num[1:], val - num[0]) arr[i] += 1 else: continue if i == 2: if arr[i] > 0: arr[i] -= 1 dfs(num[1:], val * num[0]) arr[i] += 1 else: continue if i == 3: if arr[i] > 0: arr[i] -= 1 if val < 0: temp = abs(val) // num[0] * -1 else: temp = val // num[0] dfs(num[1:], temp) arr[i] += 1 else: continue max_res = -int(1e9) min_res = int(1e9) dfs(n_num[1:], n_num[0]) print(max_res, min_res, sep='\n')
π μμ λ° μ€νκ²°κ³Ό
μμ
6 1 2 3 4 5 6 3 2 1 1
μ€νκ²°κ³Ό
72 -48
β¨οΈ λ¬Έμ νμ΄
DFS μκ³ λ¦¬μ¦κ³Ό λ°±νΈλνΉμ μ΄μ©ν λ¬Έμ νμ΄λ₯Ό νλ€.
DFSμ 맀κ°λ³μλ‘ λ€μ΄κ°λ val μ κ°μ μμ΄μ μμλ₯Ό λ°κΎΈλ©΄ μλκΈ° λλ¬Έμ λ¬΄μ¨ μ§μ ν΄λ μμ΄[0] μ κ°κ³Ό κ°λ€.
DFSμ 맀κ°λ³μλ‘ λ€μ΄κ°λ numμ μ λ ₯λ°μ μμ΄μ index 1λ²λΆν° λ€μ΄κ°λ©΄ λλ€.
DFSκ° μ’ λ£λλ μμ μ num μ΄λΌλ 리μ€νΈκ° λΉμ΄μμ λμ΄λ©° μ΄ λ, μ΅λκ°κ³Ό μ΅μκ°μ κ°±μ νλ©΄μ μ’ λ£λλ€.
μ΅λκ°μ -int(1e9), μ΅μκ°μ int(1e9)μ΄λ€.arr 리μ€νΈλ κ°κ° λ§μ (+), λΊμ (-), κ³±μ (Γ), λλμ (Γ·)μ κ°μμ΄λ©°, μ λ ₯μΌλ‘ λ°λλ€.
λ§μ½ DFSκ° λ겨λ°λ num 리μ€νΈκ° λΉμ΄μμ§ μλ€λ©΄, λ°λ³΅λ¬Έμ 0λΆν° 3κΉμ§ λ°λ³΅μ νλ€.
λ°λ³΅νλ©΄μ, κ° i μ μ«μμ λ°λΌ arr[i]μ κ°μ΄ 0λ³΄λ€ ν΄ λ, val λ³μμ ν΄λΉνλ μ°μ°μ ν΄μ€ λ€, μ¬κ·νΈμΆμ νλ€.μ¬κ·νΈμΆμ ν λ, num[1:] μ 맀κ°λ³μλ‘ λκ²¨μ£Όμ΄ μ€λ³΅ κ³μ°μ λ°©μ§νλ€.
μ΄λ κ² μ¬κ·νΈμΆμ νκ² λλ©΄ λ겨주λ 리μ€νΈλ κΈΈμ΄κ° μμμλΆν° νλμ© μμ΄μ§κ² λλλ°,
μ¬κ· νΈμΆ μ , arr[i]λ₯Ό -1 ν΄μ£Όκ³ μ¬κ· νΈμΆ ν +1 ν΄μ€λ€.
πΎ λλμ
- λ¨μν permutations νΉμ combinations λ‘ νμ§ μμκ³ ,
μ ννκ² DFS λ° λ°±νΈλνΉμ νμ©νμ¬ νμ΄νλλ°, μ΄κ²μ΄ Nκ³Ό M μ리μ¦λ₯Ό νΈλλ°μ μ’μ μ°μ΅μ΄ λλ€. - μ‘°κ±΄μ΄ ν¬κ² μμμ§λ§, division errorλ₯Ό μ‘°μ¬ν΄μΌ νκ³ ,
μμμΌ κ²½μ°μ λλμ μ λ°©μμ΄ μ‘°κΈ λ€λ₯΄κΈ° λλ¬Έμ κ°λ¨ν 쑰건 μΆκ°νλ κ²λ§ μ‘°μ¬νλ©΄ λλ λ¬Έμ μλ κ² κ°λ€.
λ°μν'PS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 1292 μ½κ² νΈλ λ¬Έμ with Python (0) 2022.02.03 [λ°±μ€] 16234 μΈκ΅¬ μ΄λ with Python (0) 2022.02.03 [λ°±μ€] 14500 ν νΈλ‘λ―Έλ Έ with Python (0) 2022.02.02 [λ°±μ€] 9933 λ―Όκ· μ΄μ λΉλ°λ²νΈ with Python (0) 2022.02.02 [λ°±μ€] 1904 01νμΌ with Python (0) 2022.02.02