728x90
728x90
๐ 1182 ๋ถ๋ถ์์ด์ ํฉ
๐ ์ ๊ทผ ::
- N๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ง ์์ด์ ๋ถ๋ถ ์์ด ์ค์์ ์์๋ฅผ ๋ค ๋ํ ๊ฐ์ด S๊ฐ ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
- ๋ฐฑํธ๋ํน ๋ฌธ์ ์์ ์๊ณ ์ ๊ทผํ๊ธฐ์ DFS ๋ก ๊น์ด ํ์์ ํ๋ฉด์ ์กฐ๊ฑด์ ์ฒดํฌํ๋ค.
๋ฐฑํธ๋ํน? ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, DFS ๋ก ๊น์ด ํ์ํ๋ฉด์ ๊ฐ ๋ฃจํธ์ ๋ํด ์กฐ๊ฑด์ ์ฒดํฌํ๋ค. ๋ง์ฝ, ํด๋น ํธ๋ฆฌ์ ์กฐ๊ฑด์ด ๋ง์ง ์์ผ๋ฉด ํด๋น ํธ๋ฆฌ ํ์์ ์ข ๋ฃํ๋ค.
โ๏ธ ๋ฌธ์ ํ์ด ๋ฐฉ๋ฒ
- ๋ถ๋ถ ์์ด์ 1์ฐจ์ ๋ฐฐ์ด๋ก ๋ํ๋ผ ์ ์๋ค.
- 1์ฐจ์ ๋ฐฐ์ด์์ ์ธ๋ฑ์ค๋ฅผ ์ฆ๊ฐ์ํค๋ฉด์ ๋ถ๋ถ ์์ด์ ํฉ์ ๊ณ์ฐํ๋ค.
- ๋ถ๋ถ ์์ด์ ํฉ์ด S๊ฐ ๋๋ ๊ฒฝ์ฐ, ์ ๋ต์ ๊ฐ์๋ฅผ ์ฆ๊ฐ์์ผฐ๋ค.
โ๏ธ ์ค์ํ๋ ๋ถ๋ถ
1. ๋ฐ๋ณตํ๋ ์ธ๋ฑ์ค๊ฐ N์ด ๋์์ ๋ ๋ถ๋ถ ์์ด์ ํฉ์ ๊ณ์ฐํ๋ฉด ์๋๋ค.
๋ง์ง๋ง ์ธ๋ฑ์ค์ ๋๋ฌํ์ง ์์๋ "๋ถ๋ถ ์์ด์ ํฉ" ์ด๋ฏ๋ก ์ ๋ต์ ํด๋นํ ์ ์๋ค.
2. "๋ถ๋ถ ์์ด์ ํฉ"์ด S๊ฐ ๋์๋ค๊ณ ํ์์ ์ข ๋ฃํ๋ฉด ์๋๋ค.
๋ค์ ๊ฒฝ์ฐ์์ ์ ๋ต์ด ๋ ์ ์๋ ๋ถ๋ถ ์์ด์ [3], [3, -3, 3], [3] ์ผ๋ก ์ธ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ๋์จ๋ค.
0๋ฒ์งธ ์ธ๋ฑ์ค์์ ํฉ์ด 3์ด ๋์๋ค๊ณ ํ์์ ์ข ๋ฃํ๊ฒ๋๋ฉด ์ ์ฒด ์งํฉ์ ๊ฒฝ์ฐ๋ ํฌํจ๋์ง ๋ชปํ๋ค. (์์๊ฐ ์กฐ๊ฑด์ ์๊ธฐ ๋๋ฌธ์ ํด๋น ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํด์ผํ๋ค.)
3 3
3 -3 3
๐ฉ๐ป Python ์ฝ๋
from sys import stdin
input = stdin.readline
n, s = map(int, input().split())
nums = list(map(int, input().split()))
result = 0
def dfs(i, graph, total):
global result, s, n
if total == s:
result += 1
# graph (๋ถ๋ถ์์ด) ๋ง๋ค๊ธฐ
for j in range(i+1, n):
dfs(j, graph, total + graph[j])
for i in range(0, n):
dfs(i, nums, nums[i])
print(result)
728x90
728x90
'๐ Algorithm > ์๊ณ ๋ฆฌ์ฆ-Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ/Python] BOJ 1543 ๋ฌธ์ ๊ฒ์ (0) | 2021.04.22 |
---|---|
[์๊ณ ๋ฆฌ์ฆ/Python] ํ๋ก๊ทธ๋๋จธ์ค - ์์ฅ (ํด์) (0) | 2021.03.11 |
[์๊ณ ๋ฆฌ์ฆ/Python] ํ๋ก๊ทธ๋๋จธ์ค - ๋คํธ์ํฌ (DFS) (0) | 2021.03.06 |
[์๊ณ ๋ฆฌ์ฆ/Python] ํ๋ก๊ทธ๋๋จธ์ค - ํ๊ฒ ๋๋ฒ (DFS) (0) | 2021.03.06 |
[์๊ณ ๋ฆฌ์ฆ/Python] BOJ 1158 - ์์ธํธ์ค ๋ฌธ์ (๊ธฐ์ด ์๋ฃ๊ตฌ์กฐ) (2) | 2021.03.06 |