문제링크 : https://www.acmicpc.net/problem/2231
이 문제는 브루트포스로 각 자리의 합이 초기N값이 되는 경우를 찾는 경우이다.
정말 간단한 문제이지만, 정수를 입력받고 각 자리수별로 분해하는 부분에서 힘들었다.
초기엔 모듈러 연산으로 접근했지만(이전에 같은 방식으로 풀었던 것 같았다.) 답을 찾지 못하였고 결국 나눗셈 연산으로 접근하였다.
주의점으로는, 5를 입력 받았다면, 답은 5이고, 10을 입력 받았다면 답은 5이다.
왜냐하면 5와 5의 부분합, 즉 5 + 5 = 10 이기 때문이다.
소스코드 :
이 문제는 브루트포스로 각 자리의 합이 초기N값이 되는 경우를 찾는 경우이다.
정말 간단한 문제이지만, 정수를 입력받고 각 자리수별로 분해하는 부분에서 힘들었다.
초기엔 모듈러 연산으로 접근했지만(이전에 같은 방식으로 풀었던 것 같았다.) 답을 찾지 못하였고 결국 나눗셈 연산으로 접근하였다.
주의점으로는, 5를 입력 받았다면, 답은 5이고, 10을 입력 받았다면 답은 5이다.
왜냐하면 5와 5의 부분합, 즉 5 + 5 = 10 이기 때문이다.
소스코드 :
#include <iostream> #include <vector> using namespace std; int N; void Func(int n) { if (n > N) { cout << '0' << endl; return; } int origin = n; vector<int> v; int mod = 10000000; v.push_back(n); int value = n; for (int i = 1; i <= 7; i++) { mod /= 10; int t = value; t /= mod; if (t == 0) continue; if (mod == 0) break; t = value / mod; v.push_back(t); value -= (t * mod); } int sum = 0; for (int i = 0; i < v.size(); i++) { sum += v[i]; } if (sum == N) { cout << origin << endl; } else { Func(origin + 1); } } int main() { cin >> N; Func(1); }
댓글
댓글 쓰기