-
[백준/BOJ] 17521번 Byte Coin (C++)알고리즘 문제풀이/백준 2020. 12. 18. 01:12
그리디 문제 유형이라고 나오는데, 저는 DFS를 이용한 완전 탐색으로 매수/매도하는 모든 경우의 수를 구하고, 그 중에서 최대값을 구해 문제를 해결했습니다. 이때, 코인의 개수와 현금이 int 범위를 벗어날 수 있으므로 long long을 쓰는 것을 주의해야합니다.
#include <iostream> #include <vector> using namespace std; int n, w; long long answer; vector<int> v; void DFS(int day, long long coin, long long cash) { if(day == n + 1) { answer = max(answer, cash); return; } else { for(int i = day; i <= n; i++) { long long num = cash / v[i]; // 매수 할 코인의 수 // 매수 DFS(i + 1, coin + num, cash - num*v[i]); // 매도 DFS(i + 1, coin - coin, cash + coin*v[i]); } } } int main(void) { ios_base::sync_with_stdio(false); cin.tie(0); cin>>n>>w; v.resize(n + 1); for(int i = 1; i <= n; i++) { cin>>v[i]; } DFS(1, 0, w); // day, countOfCoin, cash cout<<answer; }
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준/BOJ] 11727번 2×n 타일링 2 (C++) (0) 2020.12.19 [백준/BOJ] 11726번 2×n 타일링 (C++) (0) 2020.12.18 [백준/BOJ] 1463번 1로 만들기 (C++) (0) 2020.12.18 [백준/BOJ] 18111번 마인크래프트 (C++) (0) 2020.12.17 [백준/BOJ] 14226번 이모티콘 (C++) (2) 2020.12.15