ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
N๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ง ์์ด์์ ๋ถ๋ถ ์์ด์ ํฉ์ด S๊ฐ ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค. ์ด๋ ์กฐํฉ์ ๊ตฌํ๊ณ ๋ฐ์ํ ๊ฐ ์กฐํฉ ์ค ํฉ์ด S๋ฅผ ๋ง์กฑํ๋์ง ์ฐพ์ผ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค. N์ ๋ฒ์๊ฐ ํฌ์ง ์์ผ๋ฏ๋ก, ๋จ์ํ DFS๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค.
์ฝ๋
DFS๋ฅผ ์ด์ฉํ ๋ฌธ์ ํ์ด
from sys import stdin
def dfs(depth, subtotal):
global answer
if depth == n:
return
if subtotal + nums[depth] == s:
answer += 1
dfs(depth + 1, subtotal + nums[depth])
dfs(depth + 1, subtotal)
if __name__ == "__main__":
answer = 0
n, s = map(int, stdin.readline().split())
nums = list(map(int, stdin.readline().split()))
dfs(0, 0)
print(answer)
๊ฐ์ง๋ฅผ ๋ป์ผ๋ฉด์ ํ์ฌ์ ์๋ฅผ ์ ํํ๊ฑฐ๋, ์ ํํ์ง ์๋ ๊ฒฝ์ฐ์ ์๋ก ๋๋๊ฒ ๋๋ค. ๋ํ ํ๋์ ์์๋ง ์ ํ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด `if subtotal + nums[depth] == s`๋ผ๋ ์กฐ๊ฑด์ด ํ์ํ๋ค.
itertools๋ฅผ ์ด์ฉํ ๋ฌธ์ ํ์ด
from itertools import combinations
n, s = map(int, input().split())
nums = list(map(int, input().split()))
answer = 0
for i in range(1, n + 1):
for case in combinations(nums, i):
if sum(case) == s:
answer += 1
print(answer)
์กฐํฉ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ฏ๋ก ํ์ด์ฌ์ `itertools`๋ฅผ ํ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ๋จ, ํน์ ์ฝ๋ฉํ ์คํธ(ex: ์ผ์ฑ)์์๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก, DFS๋ฅผ ์ด์ฉํ ๋ฌธ์ ํ์ด๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 2143 ๋ ๋ฐฐ์ด์ ํฉ (0) | 2020.08.17 |
---|---|
๋ฐฑ์ค: 1208 ๋ถ๋ถ์์ด์ ํฉ 2 (0) | 2020.08.16 |
๋ฐฑ์ค: 1644 ์์์ ์ฐ์ํฉ (0) | 2020.08.14 |
๋ฐฑ์ค: 1860 ๋ถ๋ถํฉ (0) | 2020.08.13 |
๋ฐฑ์ค: 2003 ์๋ค์ ํฉ 2 (0) | 2020.08.13 |