gold 5 / 다이나믹 프로그래밍, 자료 구조, 해시를 사용한 집합과 맵
사실 해시에 대한 문제들을 풀고있기 때문에 당연히 해시라고 생각하고 문제를 읽었는데
이거.. dp 아닌가? 하는 생각이 들었다.
하지만 n, n+1, n+2 와 같이 순차적으로 저장되는 게 아니기 때문에 일반 배열을 이용한다면 불필요하게 공간이 많이 낭비되겠다고 생각됐다.
이런 부분에서 hash를 이용해주면 적절하게 이용되겠다.
사실 작성하면서 너무 비효율적이게 되면 어떡하나 생각했는데 다행히도 정답으로 체크되긴 했다.
# 무한 수열
# hash DP
import sys
input = sys.stdin.readline
if __name__ == "__main__":
n, p, q = map(int, input().split())
d = {0: 1}
st = [n]
while not d.get(n, 0):
i = st.pop()
if not d.get(i//p, 0):
st.append(i)
st.append(i//p)
elif not d.get(i//q, 0):
st.append(i)
st.append(i//q)
else:
d[i] = d[i//p] + d[i//q]
print(d[n])
dp는 항상 어려워해서 살짝 고민도 하고 정의도 찾아봤다.
하지만 직관적이기 때문에 어려운 문제는 아닌 것 같다.