D3
Problem
SW Expert Academy ๋ถ๋ถ์งํฉ์ ํฉ
SW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
Solution
1. Bit Masking์ ์ด์ฉํ์ฌ ๊ฐ ์๋ฆฌ์ ์ซ์๊ฐ ์๋์ง ํ์ธํ๋ ๋ฐฉ์์ ์ด์ฉํ๋ค.
2. ์ด ์ค ๊ธธ์ด๊ฐ K์ด๋ฉด์, N๋ฒ์งธ ๋ถ๋ถ ์งํฉ์ ์นด์ดํธํ๋ค.
Bit Masking
bit ์ฐ์ฐ์ ํตํด ๊ฐ ์๋ฆฌ์ ์ซ์๊ฐ ์๋๊ฐ๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ
์์งํ ๋๋ ํ๋ฒ์ ์ดํด๊ฐ ๋์ง ์์๋ค.
์๋ฅผ ๋ค์ด์, 3์ด๋ผ๋ ์ซ์๊ฐ ์์ผ๋ฉด, 2์ง์๋ก 0b0011๋ก ํํํ ์ ์๋ค.
์ด๋ ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ ์๋ฆฌ์ 1, ์ธ ๋ฒ์งธ, ๋ค ๋ฒ์งธ ์๋ฆฌ์ 0์ด ์์ด & ์ฐ์ฐ์ ํ๋ฉด ์ฒซ ๋ฒ์งธ์ ๋ ๋ฒ์งธ ์๋ฆฌ์ ์ซ์๋ฅผ ์ฐพ์ ์ ์๋ค.์ด์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ถ๋ถ ์งํฉ {1,2} ๋ฅผ ์ฐพ์ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ์ด์ฉํ๋ฉด ๋ชจ๋ ๊ฒฝ์ฐ์ ์์ ๋ถ๋ถ ์งํฉ์ ๊ตฌํ ์ ์๋ค.
Code
for test_case in range(1, int(input()) +1):
N, K = map(int, input().split())
A = list(range(1, 13))
count = 0
# N๊ฐ ๊น์ง์ ๋ถ๋ถ์งํฉ ๊ฐ์๊น์ง ๋ฐ๋ณต
for i in range(1<<12):
resu = 0
arg = 0
# 0๋ถํฐ N-1 ๊น์ง
for j in range(12):
# ๋ถ๋ถ์งํฉ์ด ์กด์ฌํ๋ค๋ฉด
if i & (1<<j):
# ๊ฐ์ ํฉ๊ณผ ๊ฐฏ์
resu += A[j]
arg += 1
if resu == K and arg == N:
count += 1
print(f'#{test_case} {count}')
<๋ถ์กฑํ ๋ถ๋ถ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ์ ์๊ฒ ๋์์ด ๋ฉ๋๋ค!>
๋ฐ์ํ
'๐ STUDY > ์๋ฃ๊ตฌ์กฐ & ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 2001. ํ๋ฆฌ ํด์น (0) | 2023.03.05 |
|---|---|
| 4836. [ํ์ด์ฌ S/W ๋ฌธ์ ํด๊ฒฐ ๊ธฐ๋ณธ] 2์ผ์ฐจ - ์์น ํ๊ธฐ (0) | 2023.03.05 |
| 16268. ํ์ ํก2 (2) | 2023.03.05 |
| 9490. ํ์ ํก (2) | 2023.03.05 |
| 1208. [S/W ๋ฌธ์ ํด๊ฒฐ ๊ธฐ๋ณธ] 1์ผ์ฐจ - Flatten (0) | 2023.03.05 |
