ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

16938๋ฒˆ: ์บ ํ”„ ์ค€๋น„

๋‚œ์ด๋„๊ฐ€ 10, 30์ธ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ฅด๊ฑฐ๋‚˜, 20, 30์ธ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ฅด๋ฉด ๋œ๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 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์ฆ๊ฐ€ ์‹œ์ผœ ์ค‘๋ณต์œผ๋กœ ์„ ํƒ๋˜์ง€ ์•Š๋„๋ก ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

 

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€