-
728x90
* 접근 방법
- 경우의 수가 x로만 이루어짐 / y로만 이루어짐 / x와 y의 조합이므로
각 경우의 x+y의 값의 합을 벡터에 저장해 둔 후, 최소값을 출력!#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> v; int T = 0; cin >> T; if (T % 3 == 0) v.push_back(T / 3); if (T % 5 == 0) v.push_back(T / 5); for (int i = 1; i < T / 3; i++) { if ((T - 3 * i) % 5 == 0) v.push_back((T - 3 * i) / 5 + i); } if (v.empty()) cout << -1; else cout << *min_element(v.begin(), v.end()); return 0; }
* 생각하지 못한 점
- 모든 경우의 수에서 5로 나누어떨어지는 경우가 항상 최소의 값이므로 이를 먼저 확인 한 후
반복문을 돌면서 T에서 3을 빼고 5로 나누어떨어지는 지 확인하는 방법으로 계산해도 될 것 같다.int num = 0; while (T > 0) { T -= 3; num++; if (T % 5 == 0) { num = num + T / 5; cout << num; return 0; } cout << -1; return 0;
항상.. 접근방법이 바로바로 생각이 안나서 힘든 것 같다.
특히, 왜 항상 혼자 어렵게 푸는걸까ㅜㅜ 다른사람들은 쉽게 쉽게 생각하던데...
이 문제도 if-else만으로도 풀 수 있는 건데, 괜히 벡터쓰고 ㅜㅜ
뭐가 맞는건지 잘 모르겠다.. 꾸준히 하다보면 잘 할 수 있겠지?'알고리즘 풀이 > 백준' 카테고리의 다른 글
[1193] 백준 : 분수찾기(C++) (0) 2020.04.25 [2292] 백준 : 벌집(C++) (0) 2020.04.25 [1712] 백준 : 손익분기점(C++) (0) 2020.04.24 [1316] 백준 : 그룹 단어 체커(C++) (0) 2020.04.24 [2941] 백준 : 크로아티아 알파벳(C++) (0) 2020.04.24 댓글