Post List

[BOJ] 백준 2231 분해합

문제링크 : https://www.acmicpc.net/problem/2231

이 문제는 브루트포스로 각 자리의 합이 초기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);
}

댓글