알고리즘/백준 문제풀이

[C++/BOJ] 백준 2231 분해합(완전탐색)[stoi,to_string]

개발자 덕구🐾 2021. 12. 19. 14:43
728x90

https://github.com/tony9402/baekjoon/tree/main/brute_force

 

GitHub - tony9402/baekjoon: 코딩테스트 대비 문제집(Baekjoon Online Judge)

코딩테스트 대비 문제집(Baekjoon Online Judge). Contribute to tony9402/baekjoon development by creating an account on GitHub.

github.com

 

저번 포스팅에 이어서 코테를 대비해 완탐 문제들을 풀고있다. 

 

 

 

분해합문제는 string 라이브러리를 이용해

to_string, stoi를 이용하여 풀었다. 

 

 

https://www.acmicpc.net/problem/2231

 

2231번: 분해합

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

www.acmicpc.net

 

 

 

N구간만큼 for문을 돌려 부분합을 구하고 입력받은 숫자와  같을 경우 해당 값을 출력한다.

만약 return 하지못하고 끝났다면 0을 출력한다.

 

 

 

약간 헤맨 부분은 int를 string으로 바꾼후에 한글자씩 더하는 부분이다.

string으로 바꾸면 각 글자를 [j]를 이용해 호출할수있다.

이것을 더할때 int형식으로 -'0'을 해주어야한다.

 

 

 

아스키코드로 48이 크기때문에 '0'(=48)을 빼주어 숫자로 계산하도록 만들기 위함이다.

 

 

 

<참고 블로그>

https://godog.tistory.com/entry/C-string-to-int-int-to-string-%ED%98%95%EB%B3%80%ED%99%98-%ED%95%98%EA%B8%B0

 

C++ string to int, int to string 형변환 하기

C++ string to int, int to string 형변환 하기 , string 문자열에서 숫자만 선택해 형변환 int stoi (const string& str [, size_t* idx = 0, int base = 10]) : string to int - string을 int로 바꾸어주기 위해..

godog.tistory.com

 

 

 

<코드>

#include<iostream>
#include<string>
using namespace std;
int tmp;
int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	int n;
	cin >> n;
	int sum = 0;
	for (int i = 1; i <= 1000000; i++) {
		sum = 0;
		string tmpstring = to_string(i);
		int size = tmpstring.size();
		for (int j = 0; j < size; j++) {
			tmp = tmpstring[j] - '0';
			sum += tmp;
			tmp = 0;
		}
		sum += i;
		if (sum == n) {
			cout << i;
			return 0;
		}
		else continue;
	}
	cout << 0;
}

 

 

 

 

완탐의 의미를 알겠다.

정말 무식하게 다 찾아보는 거였구나

 

 

그래도 답 안찾아보고 혼자 풀었다~ 기분 좋다

 

반응형