์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- ๋ฐฑ์ค
- ๋๋ฆผ์ฝ๋ฉ
- ์ฝ๋ฉ
- ์๊ณ ๋ฆฌ์ฆ
- ๋ชจ๊ฐ์ฝ
- react
- ํ๋ก ํธ์๋
- javascript
- HTML
- JS
- KDT
- ๊ตญ๋น์ง์
- mongodb
- heapq
- Python
- ์ฝ๋ฉ์ ํ
- node.js
- Til
- ๊ฐ๋ฐ
- CSS
- ํ๋ก์ ํธ
- ํ ์ดํ๋ก์ ํธ
- ํ์ด์ฌ
- error
- ๊ทธ๋ฆฌ๋
- ํ๋ก๊ทธ๋๋จธ์ค
- ํฌ๋กค๋ง
- ์ฝ๋ฉํ ์คํธ
- fe
- ๋ ธ๋ง๋์ฝ๋
- Today
- Total
๐ฑ → ๐ณ
[Baekjoon] 2404. ๋จ์ ๋ถ์๋ก ๋ถํ - python ๋ณธ๋ฌธ
https://www.acmicpc.net/problem/2404
2404๋ฒ: ๋จ์ ๋ถ์๋ก ๋ถํ
์ฒซ์งธ ์ค์ ์์ ์ ์ p, q, a, n์ด ์ ๋ ฅ๋๋ค. (1 ≤ p, q ≤ 800, 1 ≤ a ≤ 12000, 1 ≤ n ≤ 7)
www.acmicpc.net
๋ฌธ์ ์ ๋ณด
๋ฌธ์ ์ ํ | ๋์ด๋ | ๊ฑธ๋ฆฐ ์๊ฐ | ํด๊ฒฐ ์ ๋ฌด |
๋ฐฑํธ๋ํน | ์ค๋ฒ1 | 1.2h | o |
์ค๊ณ ๋ฐฉ๋ฒ
๋ฐฑํธ๋ํน
๊ตฌํด์ผ ํ๋ ํ๊น ๋ถ์์์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋นผ๊ฐ๋ฉด์ ํ์ดํจ
์ฝ๋
์๊ฐ์ด๊ณผ ..
from fractions import Fraction
import sys
input = sys.stdin.readline
p, q, a, n = map(int, input().split())
target = Fraction(p, q)
def backtrack(remaining, start, depth, product): # ๋จ์ ์, ๋จ์๋ถ์ ๋ถ๋ชจ, ๋ถ์๊ฐฏ์, ๋จ์๋ถ์ ๋ถ๋ชจ ๊ณฑ
# ๋จ์ ์์ด 0๋ณด๋ค ์๊ฑฐ๋, ๋จ์๋ถ์ ๋ถ๋ชจ ๊ณฑ์ด a๋ณด๋ค ํฌ๊ฑฐ๋, ๋ถ์๊ฐฏ์๊ฐ n๋ณด๋ค ํฌ๋ฉด return 0
if remaining < 0 or product > a or depth > n:
return 0
# ๋จ์ ์์ด 0์ด๊ณ , ๋ถ์ ๊ฐ์๊ฐ n๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด return 1
if remaining == 0 and depth <= n:
return 1
count = 0
for i in range(start, a + 1):
unit_fraction = Fraction(1,i)
if remaining-unit_fraction < 0 or product * i > a:
continue
# 1๋ถํฐ a๊น์ง ๋๋ฉด์ ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์๋ง count
count += backtrack(remaining - unit_fraction, i, depth + 1, product * i)
return count
print(backtrack(target, 1, 0, 1))
์ ๋ต ์ฝ๋ !
from fractions import Fraction
import sys
input = sys.stdin.readline
p, q, a, n = map(int, input().split())
target = Fraction(p, q)
def backtrack(remaining, start, depth, product):
if remaining < 0 or product > a or depth > n:
return 0
if remaining == 0 and depth <= n:
return 1
count = 0
for i in range(start, int(a / product) + 1): # ๋ฒ์ ์์
unit_fraction = Fraction(1,i)
# ๋จ์ ์ - ๋จ์ ๋ถ์๊ฐ 0๋ณด๋ค ์๊ฑฐ๋, ๋ถ๋ชจ ๊ณฑ์ด a๋ฅผ ๋์ผ๋ฉด continue
if remaining-unit_fraction < 0 or product * i > a:
continue
count += backtrack(remaining - unit_fraction, i, depth + 1, product * i)
return count
print(backtrack(target, 1, 0, 1))
์ด์ฐจํผ product๊ฐ a๋ณด๋ค ํฌ๋ฉด ๋ชป ๋๊ธฐ ๋๋ฌธ์ for๋ฌธ์ ๋๋ ๋ฒ์๋ฅผ (start, a+1) → (start, a//product + 1) ๋ก ๋ณ๊ฒฝํด ์ฃผ์๋ค
์ฌ๊ท๋๋ ํ์๋ฅผ ์ค์์ผ๋ก์ ์๊ฐ์ด๊ณผ ๊ทน๋ณตํจ
++ ๋จ์์-๋จ์๋ถ์ 0๋ณด๋ค ์์ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ด๋ผ ๋ฏธ๋ฆฌ ์ฒ๋ฆฌํด์ค์ผ๋ก์ backtracking ๋๋ ํ์ ์ค์
๊ทผ๋ฐ ๋ถ๋ช ๋ ์ข์ ํ์ด๊ฐ ์์ ๊ฒ ๊ฐ๋ค
์ ๋ 1๋ถํฐ a๊น์ง ๋๋ ํ์ด์ผ๋ฆฌ ์์ ..
๋ฉ๋ชจ๋ฆฌ๋ ์๊ฐ์ด ๋ ธ๋ ฅ์ด ๊ฐ์ํด์ ์ ๋ต์ฒ๋ฆฌํด์ค ์์ค
(์คํฐ๋์์ ๋ค๋ฅธ ๋ถ๋ค ํธ์ ๊ฑฐ ๋ณด๊ณ ๋ค์ ํ์ด๋ณด์ .. >!)
์๊ฐ ๋ณต์ก๋
O(2^n) ? O(a^n) ..?
์ด๋ ค์ ๋ ์
๋ฐฑํธ๋ํน ํ๋ค๋ณด๋ฉด ํจ์ ์์์ ๋ด๊ฐ ๋๊ณ ์๋ ๋ฏํ ๋๋์ ๋ฐ์
๋ง์ ๋ฌธ์ ํ๋ฉด์ ์ต์ํด์ง์
์ฐธ๊ณ
python์์ 1/3+1/3์ด๋ 1/2+1/12+1/12ํ๋ฉด ๊ฐ๊ฐ 0.6666666์ด๋ 0.6666667 ์ด๋ ๊ฒ ๊ณ์ฐ๋์ด์ ์ ํํ ๊ฐ์ ์ฐพ์ ์ ์๋ค
๋ฐ๋ผ์ fractions ๋ชจ๋ ์ฌ์ฉํ๋ฉด ์ข์ (๋ณด๋ฆฌ๋ ๊ฐ์ฌํฉ๋๋น.. )
- Import the "fractions" module
from fractions import Fraction
- Create a fraction object
Fraction(3, 4) # 3/4
'Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 1469. ์ ์ฌ์ด ์์ด - python (0) | 2023.09.29 |
---|---|
[Baekjoon] 17392. ์ฐ์ธํ ๋ฐฉํ - python (0) | 2023.09.29 |
[Baekjoon] 25421. ์กฐ๊ฑด์ ๋ง๋ ์ ์์ ๊ฐ์ - python (0) | 2023.09.28 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ - python (0) | 2023.09.28 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ชจ์์ฌ์ - python (0) | 2023.09.26 |