코딩테스트/BOJ

[백준][백트래킹] 16938.캠프 준비

박소민 2024. 10. 1. 15:32
16938.캠프 준비https://www.acmicpc.net/problem/16938

 

  • 내 풀이
    • 문제 난이도의 합은 L보다 크거나 같고, R보다 작거나 같아야 한다
    • 가장 어려운 문제와 가장 쉬운 문제의 난이도 차이는 X보다 크거나 같아야 한다.
      • 두 기준에 맞지 않아도 return 하면 X
      • -> 2개 이상을 선택했을 때 모두 체크해야하기 때문에
      • 적은 숫자에서 return 되버리면 다음 수를 추가했을 때의 경우를 체크해볼 수가 없음.
n, l, r, x = map(int, input().split())
problems = list(map(int, input().split()))
problems.sort()
ans = 0


def comb(start, cnt, tmp):
    global ans
    if cnt >= 2:
        if (l <= sum(tmp) <= r) and (max(tmp)-min(tmp) >= x):
            ans += 1

        if cnt == n:
            return

    for i in range(start, n):
        tmp.append(problems[i])
        comb(i+1, cnt+1, tmp)
        tmp.pop()


comb(0, 0, [])
print(ans)