본문 바로가기
알고리즘/백트래킹

[백준][Python] 18429번 근손실

by 임짠짠 2022. 8. 8.
반응형
 

18429번: 근손실

웨이트 트레이닝을 좋아하는 어떤 대학원생은, 현재 3대 운동 중량 500의 괴력을 소유하고 있다. 다만, 하루가 지날 때마다 중량이 K만큼 감소한다. 예를 들어 K=4일 때, 3일이 지나면 중량이 488로

www.acmicpc.net

 

 

코드

n,k = map(int,input().split())
n_list = list(map(int,input().split()))
visit = [False] * n
cnt = 0
ans = 0

def dfs(weight):
	global cnt, ans
	if weight < 500:
		return
	if cnt == n:
		ans += 1
		return
	
	for i in range(n):
		if visit[i] == False:
			visit[i] = True
			weight = weight - k + n_list[i]
			cnt += 1
			dfs(weight)
			visit[i] = False
			weight = weight + k - n_list[i]
			cnt -= 1

dfs(500)
print(ans)

 

설명

visit 리스트를 이용하여 이미 사용한 운동 키트인지 확인했다.

중량이 500 아래로 내려가면 바로 return을 해서 weight값과 cnt 값을 이전으로 돌려놓고, visit도 False로 바꿔줬다. 만약 500 아래로 내려가지 않고 모든 운동 키트를 사용했다면 cnt 값을 1 증가시켰다.

반응형

댓글