백준
백준 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를 사용하면 된다.
문제를 풀기위한 로직은 다음과 같다.
- 문제들의 난이도를 모아놓은 A리스트에서 itertools.combinations를 사용해서 2부터 N개만큼 원소를 뽑아 a라는 리스트에 담는다.
- a에 속한 원소들의 합이 L이상, R이하일 경우 a의 가장 큰 값과 가장 작은 값의 차이를 구하고 X이상인지 확인한다.
- 만약 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)