๋ฌธ์
https://www.acmicpc.net/problem/14888
์ฝ๋
n = int(input())
num = list(map(int, input().split()))
operation = list(map(int, input().split())) # +, -, *, /
maxi = -1e9
mini = 1e9
def dfs(idx, result, plus, minus, multiply, divide):
global maxi, mini
if idx == n:
maxi = max(result, maxi)
mini = min(result, mini)
return
if plus > 0:
dfs(idx + 1, result + num[idx], plus - 1, minus, multiply, divide)
if minus > 0:
dfs(idx + 1, result - num[idx], plus, minus - 1, multiply, divide)
if multiply > 0:
dfs(idx + 1, result * num[idx], plus, minus, multiply - 1, divide)
if divide > 0:
dfs(idx + 1, int(result / num[idx]), plus, minus, multiply, divide - 1)
dfs(1, num[0], operation[0], operation[1], operation[2], operation[3])
print(maxi)
print(mini)
ํ์ด
n = int(input())
num = list(map(int, input().split()))
operation = list(map(int, input().split())) # +, -, *, /
maxi = -1e9
mini = 1e9
n์ ์ฃผ์ด์ง ์ซ์์ ๊ฐ์๋ค.
num์ n๊ฐ์ ์ซ์๋ค์ด ๋ด๊ฒจ์ ธ ์๋ ๋ฐฐ์ด์ด๋ค.
operation์ ๋ํ๊ธฐ, ๋นผ๊ธฐ, ๊ณฑํ๊ธฐ, ๋๋๊ธฐ ์์ผ๋ก ๊ฐ๊ฐ ๋ช๊ฐ๊ฐ ์๋์ง ๋ด๊ฒจ์๋ ๋ฐฐ์ด์ด๋ค.
maxi๋ ๋ง๋ค ์ ์๋ ์ ๊ฒฐ๊ณผ์ ์ต๋๊ฐ์ด๋ค. ํ์ dfs ๊ณผ์ ์ ์ต๋๊ฐ์ ๋น๊ตํ๋ฉฐ ์ฐพ์๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฒ์๋ถํฐ ์์ฃผ ์์ ์๋ก ์ด๊ธฐํ ํด๋๋๋ค.
mini๋ ๋ง๋ค ์ ์๋ ์ ๊ฒฐ๊ณผ์ ์ต์๊ฐ์ด๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ dfs ๊ณผ์ ์ ์ต์๊ฐ์ ๋น๊ตํ๋ฉฐ ์ฐพ์๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฒ์๋ถํฐ ์์ฃผ ํฐ ์๋ก ์ด๊ธฐํ ํด๋๋๋ค.
def dfs(idx, result, plus, minus, multiply, divide):
global maxi, mini
if idx == n:
maxi = max(result, maxi)
mini = min(result, mini)
return
dfs ํจ์์ด๋ค. ๋งค๊ฐ๋ณ์ idx๋ dfs์ ๊น์ด๋ฅผ ์๋ฏธํ๋ค.
๋งค๊ฐ๋ณ์ result๋ ํ์ฌ๊น์ง ๋ง๋ค์ด์ง ์์ ๊ณ์ฐ ๊ฒฐ๊ณผ๊ฐ์ด๋ค.
๋งค๊ฐ๋ณ์ plus, minus, multiply divide๋ ๊ฐ ๋ํ๊ธฐ, ๋นผ๊ธฐ, ๊ณฑํ๊ธฐ, ๋๋๊ธฐ ์ฐ์ฐ์ ๋ณ๋ก ๋ช๋ฒ์ด๋ ๋ ์ฌ์ฉํ ์ ์๋์ง์ ๋ํ ํ์๋ค.
๋ง์ฝ idx(๊น์ด)๊ฐ n(์ซ์์ ๊ฐ์)์ ๊ฐ์์ง๋ค๋ฉด
ํ์ฌ ์ต๋๊ฐ, ์ต์๊ฐ์ ๊ฐ๊ฐ result(์์ ๊ณ์ฐ ๊ฒฐ๊ณผ๊ฐ)์ ๋น๊ตํ ํ ์ต๋๊ฐ, ์ต์๊ฐ์ ๊ฐฑ์ ํ๊ณ return ํ๋ค.
if plus > 0:
dfs(idx + 1, result + num[idx], plus - 1, minus, multiply, divide)
if minus > 0:
dfs(idx + 1, result - num[idx], plus, minus - 1, multiply, divide)
if multiply > 0:
dfs(idx + 1, result * num[idx], plus, minus, multiply - 1, divide)
if divide > 0:
dfs(idx + 1, int(result / num[idx]), plus, minus, multiply, divide - 1)
idx๊ฐ n์ ๋๋ฌํ ๋ ๊น์ง๋ ์ด ์ฝ๋๋ฅผ dfs ๋ฐฉ๋ฒ์ผ๋ก ์ํํ๋ค.
๊ฐ๊ฐ์ ์ฐ์ฐ์๋ค์ ๋ํด์ ์ธ ์ ์๋ ํ์๊ฐ 0 ์ด๊ณผ๋ผ๋ฉด
dfs๋ฅผ ์ฌ๊ทํธ์ถ ํด์ฃผ๋๋ฐ ๊ฐ ๋งค๊ฐ๋ณ์์ ๋ํด์
๊น์ด๋ฅผ 1 ๋ํ๊ณ , ์ํํ๊ณ ์๋ ์ฐ์ฐ์์ ๋ง๋ ์ฐ์ฐ์ result์ ์ฒ๋ฆฌํด์ฃผ๊ณ , ์ํํ๊ณ ์๋ ์ฐ์ฐ์์ ์ฌ์ฉ ๊ฐ๋ฅ ํ์๋ฅผ -1 ํด์ค๋ค.
dfs(1, num[0], operation[0], operation[1], operation[2], operation[3])
print(maxi)
print(mini)
dfs๋ฅผ ์คํํ๋๋ฐ ํจ์์ ๋งค๊ฐ๋ณ์๋ ๊น์ด๋ 1, result๋ ๋ฐ์ ์ซ์๋ค์ ๋งจ ์ฒ์ ์ซ์, operation์ ๋ฐ์ ๊ฐ ์ฐ์ฐ์๋ค์ ์ฌ์ฉ ๊ฐ๋ฅ ํ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฃ์ด์ค๋ค.
dfs๋ฅผ ์คํํ๊ณ ๋ ๋ค์ ์ต๋๊ฐ, ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
'์ฝ๋ฉํ ์คํธ๐ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1135. ๋ด์ค ์ ํ๊ธฐ (0) | 2024.08.03 |
---|---|
[๋ฐฑ์ค] 1927. ์ต์ ํ & 11279. ์ต๋ ํ (0) | 2024.07.31 |
[๋ฐฑ์ค] 1012. ์ ๊ธฐ๋ ์๋ฐฐ์ถ (2) | 2024.07.14 |
[๋ฆฟ์ฝ๋] Reduce Array Size To The Half (0) | 2024.06.27 |
[๋ฆฟ์ฝ๋] Seat Reservation Manager (0) | 2024.06.26 |