Programming Language/알고리즘 공부

[백준] 18429 근손실 파이썬

깜태 2021. 3. 29. 17:58
728x90

링크 : www.acmicpc.net/problem/18429

 

푸는 방법

1. N일동안 A개의 운동을 선택해서 진행하므로, itertools를 이용해 순열을 생성합니다.

 

그리고, 이 경우가 할수 있는 운동의 최대 개수입니다.

 

2. N일동안 운동하는 중에, 근손실이 발생하면 안되므로 매일마다 운동량이 0보다 작아지는지 확인하고 

 

만약 작아진다면 최대 개수에서 1개씩 뺍니다.

 

3. 전체 가능한 운동 개수에서 근손실이 발생한 경우를 뺀 나머지를 출력합니다.

 

코드

import itertools
N, K = map(int, input().split())
A = list(map(int, input().split()))
cases = list(itertools.permutations(A, N))
count = len(cases)
for case in cases:
	weights=0
	for i in range(N):
		weights+=(case[i]-K)
		if weights<0:
			count-=1
			break
print(count)
728x90