CS log
[๋ฐฑ์ค/python] 1182๋ฒ : ๋ถ๋ถ ์์ด์ ํฉ ๋ณธ๋ฌธ
๐๋ฌธ์
https://www.acmicpc.net/problem/1182
N๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ง ์์ด์ด ์์ ๋, ํฌ๊ธฐ๊ฐ ์์์ธ ๋ถ๋ถ์์ด ์ค์์ ๊ทธ ์์ด์ ์์๋ฅผ ๋ค ๋ํ ๊ฐ์ด S๊ฐ ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ N๊ณผ ์ ์ S๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) ๋์งธ ์ค์ N๊ฐ์ ์ ์๊ฐ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. ์ฃผ์ด์ง๋ ์ ์์ ์ ๋๊ฐ์ 100,000์ ๋์ง ์๋๋ค.
๐์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํฉ์ด S๊ฐ ๋๋ ๋ถ๋ถ์์ด์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
๐ํ์ด ๋ฐฉ๋ฒ
combination ํจ์๋ฅผ ์ด๋ค -!
๐์ฝ๋
import sys
from itertools import combinations
N, S = map(int,sys.stdin.readline().split())
arr = list(map(int,input().split()))
cnt = 0
for i in range(1, N+1) :
comb = combinations(arr,i)
for c in comb :
if sum(c) == S : cnt+=1
print(cnt)
๐์๊ฐ๋ณต์ก๋
for๋ฌธ์ด ๋ ๊ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ O(n^2)
๋์ ์ ๋ ฅ์ ๋ฐ์ ๋์ sys.stdin.readline()์ ์ฌ์ฉํ์ฌ ์ต๋ํ ์๊ฐ๋ณต์ก๋๋ฅผ ์ค์ฌ๋ณด๋ ค๊ณ ํ์.
๐combination
์กฐํฉ : ์กฐํฉ์ด๋ ์๋ก ๋ค๋ฅธ n๊ฐ ์ค์์ r๊ฐ(n≥r) ์ทจํ์ฌ ์กฐ๋ฅผ ๋ง๋ค ๋, ์ด ํ๋ํ๋์ ์กฐ๋ฅผ n๊ฐ ์ค์์ r๊ฐ ์ทจํ ์กฐํฉ์ด๋ผ๊ณ ํ๋ค.
์กฐํฉ์ ์์๋ฅผ ๊ณ ๋ คํ์ง ์๋๋ค. [A, B, C]์ ๋ฆฌ์คํธ์์ 2๊ฐ์ ์์๋ฅผ ๊ณจ๋ผ ๋์ดํ๋ฉด
[(A, B), (A, C), (B, C)] ๊ฐ ๋์ค๊ฒ ๋๋ค. ์กฐํฉ์ (A, B)์ (B, A)๋ ๊ฐ์ ๊ฒ์ผ๋ก ์ทจ๊ธํ๋ค.
from itertools import combinations
arr = ['A', 'B', 'C']
nCr = combinations(arr, 2)
print(list(nCr))
>>> [('A', 'B'), ('A', 'C'), ('B', 'C')]
'CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DFS & BFS (0) | 2024.08.14 |
---|---|
๊ธฐ์ด ์๋ฃ๊ตฌ์กฐ (0) | 2024.08.14 |
[๋ฐฑ์ค/python] 4779๋ฒ : ์นธํ ์ด ์งํฉ (0) | 2024.08.09 |
์ฌ๊ท recursive function (0) | 2024.08.09 |
[๋ฐฑ์ค/python] 1018 ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ (0) | 2024.08.04 |