Notice
Recent Posts
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
관리 메뉴

교대최소제곱법

[백준 파이썬 2294번 동전 2] 메모리 초과 문제 해결 본문

코딩테스트

[백준 파이썬 2294번 동전 2] 메모리 초과 문제 해결

옐라크레 2023. 10. 24. 17:30

https://www.acmicpc.net/problem/2294

 

2294번: 동전 2

첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주어

www.acmicpc.net

 

BFS로 빠르게 풀었지만 메모리 초과...

 

기존의 BFS 문제의 경우 상하좌우 최대 4가지 분기로만 나눠졌기 때문에 메모리 초과 문제가 안났지만

이번 문제는 연결된 노드의 개수만큼 큐에 저장되기 때문에 케이스에 따라 메모리 초과가 날 수 있다는 것을 고려해야했다.

 

BFS문제에서 메모리 초과가 날 경우

-> DP를 첨가해서 풀면 맛이 좋다

 

from collections import deque


def bfs(cls, target):
    q = deque([(0, target)])

    while q:
        coin_cnt, now = q.popleft()

        for c in cls:
            if now - c > 0 and dp[now-c] > coin_cnt + 1:
                dp[now-c] = coin_cnt + 1
                q.append((coin_cnt+1, now - c))
            elif now - c == 0:
                return coin_cnt + 1
    return -1


N, K = map(int, input().split())
coin_ls = []
dp = [int(1e9) for _ in range(K+1)]
for _ in range(N):
    n = int(input())
    if n not in coin_ls:
        coin_ls.append(n)

print(bfs(coin_ls, K))

 

참고자료

https://campkim.tistory.com/15

 

백준 동전 2294 BFS 파이썬 문제풀이

https://www.acmicpc.net/problem/2294 2294번: 동전 2 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연

campkim.tistory.com