PS (C, C++)

[백준/C++] 1351 무한 수열

최연재 2024. 9. 17. 20:48

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

 

코드

#include <iostream>
#include <unordered_map>
using namespace std;

#define FASTIO ios::sync_with_stdio(false);cin.tie(NULL);
typedef long long ll;

unordered_map<int, ll> m; 
ll n, p, q;

ll solve(ll now) {
	if (m[now] != 0) return m[now];
	m[now] = solve(now / p) + solve(now / q);
	return m[now];
}

int main() {
	FASTIO;
	cin >> n >> p >> q;
	m[0] = 1;
	cout << solve(n) ;
	return 0;
}

설명

재귀함수를 문제에서 제시된 식 형태로 계속 호출해나가며 답을 구해나간다. 

느낀 점

구현 자체는 어렵지 않았다. 처음에는 bottom-up으로 풀었더니 메모리 초과가 났다. 그래서 top-down으로 바꿔서 다시 제출하니 바로 통과했다. 저번에 map을 이용해서 시간초과가 났던 문제가 unordered_map을 쓰니 바로 통과한 경우가 있어서 처음부터 unordered_map을 사용했다!

'PS (C, C++)' 카테고리의 다른 글

[백준/C++] 21555 빛의 돌 옮기기  (0) 2024.09.19
[백준/C++] 21773 가희와 프로세스 1  (0) 2024.09.18
[백준/C++] 3190 뱀  (0) 2024.09.17
[백준/C++] 18126 너구리 구구  (0) 2024.09.14
[백준/C++] 1240 노드사이의 거리  (2) 2024.09.14