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)
'백준' 카테고리의 다른 글
백준 2900 프로그램(파이썬) (0) | 2023.08.25 |
---|---|
백준 1030 프렉탈 평면 (파이썬) (0) | 2023.08.04 |
백준 15486 이진수 덧셈(파이썬) (1) | 2023.07.10 |
백준 2812 크게 만들기 (파이썬) (0) | 2023.07.06 |
백준 4358 생태학 (파이썬) (0) | 2023.06.24 |