[BaekJoon] 백준 1182번 부분수열의 합
문제: https://www.acmicpc.net/problem/1182
내코드
문제를 봤을 때 N의 최대값이 100,000이었고 배열 전체를 다 돈다고 해도 시간초과가 나지 않을 것 같아서
백트래킹으로 풀어야 겠다고 생각했다.
dfs로 첫번째 숫자부터 탐색을 하면서 합이 S가 되면 결과값에 1을 더해줬다.
처음에는 이런 류의 문제가 어려웠는데 풀면서 익숙해지는 것 같다:)
# BaekJoon1182.py
N, S = map(int, input().split())
arr = list(map(int, input().split()))
visited = [False] * N
result = 0
# 방문하지 않은 처음은 제외하기 위해 사용
def check_false():
global visited
for i in range(N):
if visited[i]:
return True
return False
def solve(summ, start):
global result, N, S
if summ == S and check_false():
result += 1
for i in range(start, N):
if not visited[i]:
visited[i] = True
summ += arr[i]
solve(summ, i)
visited[i] = False
summ -= arr[i]
solve(0, 0)
print(result)
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 1325 효율적인 해킹 (0) | 2021.08.07 |
---|---|
[BaekJoon] 백준 20444번 색종이와 가위 (0) | 2021.08.06 |
[BaekJoon] 백준 18870번 좌표 압축 (0) | 2021.07.31 |
[BaekJoon] 백준 2630번 색종이 만들기 (0) | 2021.07.31 |
[BaekJoon] 백준 1620번 나는야 포켓몬 마스터 이다솜 (0) | 2021.07.31 |