ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
N๊ฐ์ ๋ฌธ์ ๊ฐ ์ฃผ์ด์ง๊ณ , ๊ฐ๊ฐ์ ๋ฌธ์ ์ ๋ํ ๋์ด๋๊ฐ ์ฃผ์ด์ง๋ค. 2๊ฐ ์ด์์ ๋ฌธ์ ๋ฅผ ์ ํํ ๋ ๋ชจ๋ ๋ฌธ์ ๋์ด๋์ ํฉ์ L๋ณด๋ค ํฌ๊ณ , R๋ณด๋ค ์์ด์ผ ํ๋ค. ๋ํ, ๊ฐ์ฅ ์ด๋ ค์ด ๋ฌธ์ ์ ๊ฐ์ฅ ์ฌ์ด ๋ฌธ์ ์ ๋์ด๋ ์ฐจ๋ X๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์์ผ ํ๋ค.
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ DFS๋ฅผ ํตํด ์กฐํฉ์ ๊ตฌํ๋ฉด ๋๋ค. DFS๋ก ์กฐํฉ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ N๊ณผ M (2) ์ ๋์ผํ ๋ก์ง์ผ๋ก ํ๋ฉด ๋๋ค. `itertools.combination`๋ก ๊ตฌํ๋ฉด ๊ฐ์ง์น๊ธฐ๋ฅผ ํ ์ ์์ด ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ ๊ฒ ๊ฐ๋ค.
์ฝ๋
from sys import stdin
from math import inf
def dfs(score, idx, cnt, total_sum):
global answer
if cnt >= 2:
if l <= total_sum <= r and score[MAX] - score[MIN] >= x:
answer += 1
for i in range(idx, n):
if questions[i] + total_sum <= r:
next_score = [min(score[MIN], questions[i]), max(score[MAX], questions[i])]
dfs(next_score, i + 1, cnt + 1, questions[i] + total_sum)
if __name__ == '__main__':
MIN, MAX = 0, 1
answer = 0
n, l, r, x = map(int, stdin.readline().split())
check = [False] * n
questions = list(map(int, stdin.readline().split()))
dfs([inf, -inf], 0, 0, 0)
print(answer)
DFS๋ฅผ ํตํ์ฌ ํ์ํ๋ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํ ๋, r๋ณด๋ค ํฐ ๊ฒฝ์ฐ๋ ์ถ๊ฐํ์ง ์๋๋ก ํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ์ง ์๊ณ ๋ฌธ์ ๋ฅผ ํต๊ณผํ ์ ์๋ค. ๋ํ, ์กฐํฉ์ ๊ตฌํ๋ฏ๋ก `idx`๋ฅผ ํ์ฌ ์ ํ๋ `idx`์์ 1์ฆ๊ฐ ์์ผ ์ค๋ณต์ผ๋ก ์ ํ๋์ง ์๋๋ก ํ์ฌ์ผ ํ๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 11060 ์ ํ ์ ํ (0) | 2020.09.27 |
---|---|
๋ฐฑ์ค: 16936 ๋3๊ณฑ2 (0) | 2020.09.26 |
๋ฐฑ์ค: 12869 ๋ฎคํ๋ฆฌ์คํฌ (0) | 2020.09.25 |
๋ฐฑ์ค: 16197 ๋ ๋์ (0) | 2020.09.25 |
๋ฐฑ์ค: 15686 ์นํจ ๋ฐฐ๋ฌ (0) | 2020.09.24 |