문제
n개의 수들을 k개 만큼 뽑아 더한 수들의 합이 m의 배수인 경우를 다 구하라
문제풀이
def DFS(L,s,total):
global cnt
if L == k:
if total%m == 0:
cnt += 1
else:
for i in range(s, n):
DFS(L+1, i+1, total + a[i] )
if __name__ =="__main__":
n, k = map(int,input().split())
a = list(map(int,input().split()))
m = int(input())
cnt = 0
DFS(0,0,0)
- k개 만큼씩 수들의 조합을 뽑아낸 뒤 해당 k의 조합의 합이 m의 배수라면 cnt를 1개 증가시켜준다.
- L = 노드 레벨
- s는 그 앞전에 확인했던 부분을 빼주기 위함이다.
- total에 해당 값을 더해가며 이 부분이 m으로 나눴을 때 나머지가 0이라면 배수이기 때문에 cnt를 증가한다.
'자료구조와 알고리즘 > 개인적인 코딩테스트 관련 풀이' 카테고리의 다른 글
[동적 계획법][Top-Down] - 네트워크 선 자르기 (0) | 2022.08.16 |
---|---|
[동적 계획법][Bottom-Up] - 네트워크 선 자르기 (0) | 2022.08.16 |
[BFS] - 섬나라 아일랜드 (0) | 2022.08.05 |
[DFS][완전 탐색] - 미로탐색 (0) | 2022.07.31 |
[BFS][최단거리 구하기] - 미로의 최단거리 통로 (0) | 2022.07.31 |