백준

백준 16938 캠프 준비(파이썬)

sami355 2023. 7. 11. 21:41
https://www.acmicpc.net/problem/16938
 

16938번: 캠프 준비

난이도가 10, 30인 문제를 고르거나, 20, 30인 문제를 고르면 된다.

www.acmicpc.net

풀이

주어지는 입력은 N, L, R, X와 문제의 난이도인 A이다. 

이때 문제에서 주어진 조건은 두 개이다.

1. 문제 난이도의 합은 L이상 R이하이다.
2. 문제 난이도의 가장 큰 편자는 X이하이다.

위의 조건을 그대로 파이썬에서 구현하기 위해  itertools.combinations를 사용하면 된다.

문제를 풀기위한 로직은 다음과 같다.

  1. 문제들의 난이도를 모아놓은 A리스트에서 itertools.combinations를 사용해서 2부터 N개만큼 원소를 뽑아 a라는 리스트에 담는다.
  2. a에 속한 원소들의 합이 L이상, R이하일 경우 a의 가장 큰 값과 가장 작은 값의 차이를 구하고 X이상인지 확인한다.
  3. 만약 X이상이라면 answer를 +1한다.

코드

import sys, itertools

input = lambda: sys.stdin.readline().rstrip()
N, L, R, X = map(int, input().split())
answer = 0

A = list(map(int, input().split(" ")))

for n in range(2, N+1):
    for a in (itertools.combinations(A, n)) :
        if L <= sum(a) <= R:
            if max(a) - min(a) >= X:
                answer += 1
print(answer)