1. ๋ฌธ์ ์ค๋ช
๋์์ด๋ ์ฌ๋ฌ ์ฌ๋ฃ๋ฅผ ์ด์ฉํด ์์์ ๋ง๋ค๊ณ ์ ํฉ๋๋ค. ๊ฐ ์ฌ๋ฃ๋ ์ ๋ง๊ณผ ์ด๋ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ ๋ง์ ๋ชจ๋ ์ฌ๋ฃ์ ์ ๋ง์ ๊ณฑ์ผ๋ก, ์ด๋ง์ ๋ชจ๋ ์ฌ๋ฃ์ ์ด๋ง์ ํฉ์ผ๋ก ๊ฒฐ์ ๋ฉ๋๋ค. ์ฌ๋ฌ ์ฌ๋ฃ๋ฅผ ์์์ ๋ ์ ๋ง๊ณผ ์ด๋ง์ ์ฐจ์ด๋ฅผ ์ต์ํํ๋ ค๊ณ ํฉ๋๋ค. ์ด๋, ์ต์ ์ฐจ์ด๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์.
๋ฌธ์ URL: https://www.acmicpc.net/problem/2961
2. ์ ๊ทผ๋ฒ
1) ์ ๋ ฅ๋ฐ๊ธฐ: ์ฌ๋ฃ์ ์์ ๊ฐ ์ฌ๋ฃ์ ์ ๋ง๊ณผ ์ด๋ง์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
2) ์ฌ๊ท ํจ์ ์ ์: ์ ๋ง๊ณผ ์ด๋ง์ ์ฌ๊ท์ ์ผ๋ก ๊ณ์ฐํ์ฌ ์ต์ ์ฐจ์ด๋ฅผ ๊ตฌํฉ๋๋ค.
3) ๊ฒฐ๊ณผ ์ถ๋ ฅ: ๊ฐ๋ฅํ ์ต์ ์ฐจ์ด๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
3. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
# ์
๋ ฅ๊ฐ ๋ฐ๊ธฐ: ์ฌ๋ฃ์ ์ N์ ์
๋ ฅ๋ฐ๋๋ค.
N = int(input())
# ๊ฐ ์ฌ๋ฃ์ ์ ๋ง๊ณผ ์ด๋ง์ ๋ฆฌ์คํธ๋ก ์
๋ ฅ๋ฐ๋๋ค.
igd = [list(map(int, input().split())) for _ in range(N)]
# ๊ฒฐ๊ณผ๊ฐ ์ด๊ธฐํ: ์ต์๊ฐ์ ๊ตฌํด์ผ ํ๋ฏ๋ก ์ต๋๊ฐ์ผ๋ก ์ด๊ธฐํํ๋ค.
ans = sys.maxsize
# ์ฌ๊ท ํจ์ ์ ์: ์ ๋ง(s)๊ณผ ์ด๋ง(b), ํ์ฌ ์ฌ๋ฃ์ ๋ฒํธ(num), ์ฌ์ฉํ ์ฌ๋ฃ์ ์(use)
def rec(s, b, num, use):
global ans
# ๋ชจ๋ ์ฌ๋ฃ๋ฅผ ๋ค ์ฌ์ฉํ ๊ฒฝ์ฐ
if num == N:
# ์ฌ์ฉํ ์ฌ๋ฃ๊ฐ ํ๋ ์ด์์ธ ๊ฒฝ์ฐ์๋ง ๊ณ์ฐํ๋ค.
if use > 0:
# ์ ๋ง๊ณผ ์ด๋ง์ ์ฐจ์ด ์ ๋๊ฐ์ ๊ตฌํ์ฌ ์ต์๊ฐ ๊ฐฑ์
ans = min(ans, abs(s-b))
return
# ํ์ฌ ์ฌ๋ฃ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
S = igd[num][0]; B = igd[num][1]
rec(s * S, b + B, num + 1, use + 1)
# ํ์ฌ ์ฌ๋ฃ๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ
rec(s, b, num + 1, use)
# ์ฌ๊ท ํจ์ ํธ์ถ: ์ด๊ธฐ๊ฐ์ผ๋ก ์ ๋ง 1, ์ด๋ง 0, ์ฒซ๋ฒ์งธ ์ฌ๋ฃ ๋ฒํธ 0, ์ฌ์ฉํ ์ฌ๋ฃ 0์ผ๋ก ์์
rec(1, 0, 0, 0)
# ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ
print(ans)
4. ์ฝ๋ ์ค๋ช
1) ์ ๋ ฅ๊ฐ ๋ฐ๊ธฐ
- ์ฌ๋ฃ์ ์์ ๊ฐ ์ฌ๋ฃ์ ์ ๋ง๊ณผ ์ด๋ง์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
2) ์ฌ๊ท ํจ์ ์ ์
- ์ฌ๊ท ํจ์๋ฅผ ์ ์ํ์ฌ ๋ชจ๋ ์ฌ๋ฃ๋ฅผ ์ฌ์ฉํ์ ๋์ ์ ๋ง๊ณผ ์ด๋ง์ ์ฐจ์ด๋ฅผ ๊ณ์ฐํ๊ณ ์ต์๊ฐ์ ๊ฐฑ์ ํฉ๋๋ค.
3) ์ฌ๊ท ํจ์ ํธ์ถ
- ์ฌ๊ท ํจ์๋ฅผ ์ด๊ธฐ๊ฐ์ผ๋ก ํธ์ถํ์ฌ ๊ณ์ฐ์ ์์ํฉ๋๋ค.
4) ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ
- ์ต์ข ์ ์ผ๋ก ๊ณ์ฐ๋ ์ต์๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
***
์ด ์ฝ๋๋ ๋ชจ๋ ์ฌ๋ฃ ์กฐํฉ์ ํ์ํ์ฌ ์ ๋ง๊ณผ ์ด๋ง์ ์ฐจ์ด๊ฐ ์ต์๊ฐ ๋๋ ๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. rec ํจ์๋ ์ฌ๊ท์ ์ผ๋ก ๋ชจ๋ ์กฐํฉ์ ์๋ํ๋ฉฐ, ์ฌ๋ฃ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ๋ก ๋๋์ด ํ์ํฉ๋๋ค. ์ต์ข ์ ์ผ๋ก ์ ๋ง๊ณผ ์ด๋ง์ ์ฐจ์ด์ ์ต์๊ฐ์ ans์ ์ ์ฅํ๊ณ , ์ด๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
***
5. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ(๋ฐฑ์ค) 14501[ํด์ฌ] (0) | 2024.06.25 |
---|---|
BOJ(๋ฐฑ์ค) 19942[๋ค์ด์ดํธ] (0) | 2024.06.25 |
BOJ(๋ฐฑ์ค) 2343[๊ธฐํ ๋ ์จ] (0) | 2024.06.21 |
BOJ(๋ฐฑ์ค) 2512[์์ฐ] (0) | 2024.06.21 |
BOJ(๋ฐฑ์ค) 2309[์ผ๊ณฑ ๋์์ด] (0) | 2024.06.20 |