알고리즘 연습

C++ 2231 분해합

728x90

#include<iostream>

using namespace std;

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	
	int n;
	cin >> n;
	int min = n;
	for (int i = 0; i < n; i++) {
		if (n == i + i / 100 + i % 100 / 10 + i % 10)
			if (i < min)
				min = i;
	}
	cout << min;
}

틀렸다.

생성자가 없는경우를 생각하지 못했다 ㅎㅎ;

 

생성자를 넣어주려고 머리를 굴리다가 문제가 그뿐이 아니라는 것을 알게되었다.

n의 범위가 100의 단위로만 한정된 것이 아니기에 다시 풀어야한다는 것을 알게되었고

다른 블로그를 통해 해답을 얻게되었다.

 

#include <iostream>
#include <cmath>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n, result = 10000001;
	int generate;
	cin >> n;

	for (int i = 1; i <= n; i++) {
		generate = i + (i % 10);
		for (int j = 1; j <= log10(i); j++) {
			generate += (i % (int)pow(10, j + 1)) / pow(10, j);
		}
		if (generate == n && i < result)
			result = i;
	}
	if (result > 1000000)
		cout << 0 << '\n';
	else
		cout << result << '\n';
}

왜 result를 저렇게 했나 생각을 해봤는데 조건에 부합하는 경우에만 i로 초기화 되고, 그렇지 않으면 10000001으로 유지가 되니 생성자가 없는 경우 0이 출력 될 수 있게 해놓은 것이다.

어렵다.

728x90

'알고리즘 연습' 카테고리의 다른 글

C++ 11650 좌표 정렬하기  (1) 2021.10.01
C++ 1427 소트 인사이드  (0) 2021.09.30
C++ 2798 블랙잭  (0) 2021.09.30
C++ 4153 직각삼각형  (0) 2021.09.28
C++1085 직사각형에서 탈출  (0) 2021.09.28