[ BOJ / Python ] 16938번 캠프 준비

황승환·2022년 3월 15일
0

Python

목록 보기
246/498


이번 문제는 파이썬의 itertools 모듈을 사용하여 해결하였다. 2부터 n까지 반복하는 i에 대한 for문을 돌려 i개로 이루어진 combinations를 모두 생성하고, 생성된 combinations들을 순회하며 전체 합, 최댓값과 최솟값의 차를 l, r, x와 비교하여 조건에 만족할 경우 결과 변수를 증가시키는 방식으로 풀이하였다.

  • n, l, r, x를 입력받는다.
  • a를 입력받는다.
  • 결과 변수 answer를 0으로 선언한다.
  • combinations들을 저장할 리스트 case를 선언한다.
  • 2부터 n까지 반복하는 i에 대한 for문을 돌린다.
    -> case에 combinations(a, i)를 list 타입으로 추가한다.
  • case의 길이만큼 반복하는 i에 대한 for문을 돌린다.
    -> 만약 case[i]의 합이 l 이상, r 이하이고, case[i]의 최댓값 - case[i]의 최솟값이 x 이상일 경우,
    --> answer를 1 증가시킨다.
  • answer를 출력한다.

Code

import itertools
n, l, r, x=map(int, input().split())
a=list(map(int, input().split()))
answer=0
case=[]
for i in range(2, n+1):
    case+=list(itertools.combinations(a, i))
for i in range(len(case)):
    if l<=sum(case[i])<=r and max(case[i])-min(case[i])>=x:
        answer+=1
print(answer)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글