[Baekjoon/๐ŸฅˆSilverโ…ก] 1182: ๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ

์ตœ๋Œ€ 1 ๋ถ„ ์†Œ์š”

Intro

๋ฌธ์ œ์‚ฌ์ง„

Algoritm๐Ÿ‘ฉโ€๐Ÿ’ป: combination

#21.01.12
#1182: ๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ

import sys, itertools
N, S = map(int, sys.stdin.readline().rstrip().split())
lst = list(map(int, sys.stdin.readline().rstrip().split()))
count = 0

for i in range(1, N+1):
  result = list(itertools.combinations(lst, i))
  for j in result:
    if sum(j) == S:
      count += 1

print(count)
  • ์ฃผ์–ด์ง„ ์ˆ˜์—ด๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ถ€๋ถ„์ˆ˜์—ด์„ ๊ตฌํ•œ๋‹ค.
    • combination ํ•จ์ˆ˜ ์‚ฌ์šฉ!
  • ๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ์ด S์ธ ๊ฒฝ์šฐ๋ฅผ ์นด์šดํŠธํ•œ๋‹ค.

๊ฒฐ๊ณผ

Algoritm๐Ÿ‘ฉโ€๐Ÿ’ป: DFS

import sys

def dfs(index, sum):
  global count
  if index >= N:
    return
  sum += lst[index]
  if sum == S:
    count += 1
  dfs(index + 1, sum)
  dfs(index + 1, sum - lst[index])

N, S = map(int, sys.stdin.readline().rstrip().split())
lst = list(map(int, sys.stdin.readline().rstrip().split()))
count = 0
dfs(0, 0)
print(count)
  • ์ธ๋ฑ์Šค๋ฅผ ํ•˜๋‚˜์”ฉ ๋Š˜๋ ค๊ฐ€๋ฉฐ ์ˆœ์—ด์˜ ๋ชจ๋“  ๊ฐ’์„ ์ˆœํšŒํ•œ๋‹ค.
    • ํ•ด๋‹น๊ฐ’์„ ๋”ํ–ˆ์„ ๊ฒฝ์šฐ์™€ ๋”ํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆ„์–ด ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
      • dfs ์ ์šฉ!

๊ฒฐ๊ณผ

์ฐธ๊ณ ๐Ÿ“ƒ


์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ์—ฌ๊ธฐ์„œ!!

๋!! ~(ห˜โ–พห˜~)

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ