본문 바로가기
PS(Problem Solving)/백준_BOJ

[백준] 2231번 - 분해합 (C++/파이썬) 문제 및 풀이

by 초코칩프라푸치노 2021. 3. 18.

문제) 백준 - 브루트 포스(Brute Force) - 분해합

-> www.acmicpc.net/problem/2231

 

2231번: 분해합

어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이

www.acmicpc.net

 

1부터 n까지 완전 탐색을 수행한다. 만약 생성자를 찾을 경우, 그 즉시 반복문을 탈출한다.

 

 

 

C++ 소스 코드)

#include <iostream>
using namespace std;
int n, ans = 0;

//생성자 함수
int constructor(int a) {
	int res = a;
	while (a > 0) {
		res += a % 10;
		a = a / 10;
	}
	return res;
}

int main() {
	//빠른 입출력
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	cin >> n;
	for (int i = 1; i <= n; i++) {
		if (constructor(i) == n) {
			ans = i;
			break;
		}
		
	}

	cout << ans << "\n";

	return 0;
}

 

 

 

Python 소스 코드)

import sys

#빠른 입출력
N = int(sys.stdin.readline())

#생성자 함수
def constructor(num: int):
    str_num = str(num)
    new_num = num
    for i in range(len(str_num)):
        new_num += int(str_num[i])
    return new_num

answer = 0
for i in range(N):
    if constructor(i) == N:
        answer = i
        break
        
print(answer)

 

 

반응형

댓글