백준 2231(분해합)

jh Seo·2022년 6월 13일
1

백준

목록 보기
2/180

개요

[링크] 백준 2231번: 분해합

접근 방식

입력값으로 주어지는 자연수의 범위가 100만이고,
각 반복문에서 입력값을 하나씩 나누고,
더하는 건 O(1)의 시간복잡도이므로
완전탐색을 사용했다.

접근 코드

#include<iostream>

using namespace std;

void solution(int& input);

void input(int& input) {
	cin >> input;
}

void solution(int& input) {
	int sum = 0;						//합
	for (int i = 0; i < input; i++) {	//범위는 0부터 입력값까지

		int temp = i;					//임시값인 temp에 i를 넣어준다.
		sum += temp;					//원래 수 더해준 후
		while (temp > 0) {				//각 자리 수 더해준다.
			sum += temp % 10;
			temp /= 10;
		}
		if (sum == input) {				//만약 생성자라면
			cout << i;					//출력후 return
			return;
		}
		else                            //아니면 sum=0으로 초기화
			sum = 0;
			
	}
	cout << 0;							//반복문 빠져나온거면
	return;								//생성자가 없는것이므로 0출력
}



int main() {			
	int in = 0;
	input(in);
	solution(in);

}

문풀후새ㅇ

처음엔 그냥 생각없이 temp값을 따로 안 빼고
바로 while(i>0) i/=10;을 했더니
i가 계속 0이 되어 본의 아닌 무한 루프가 되었다.
멍청하다. 더 신중하게 풀자.

profile
코딩 창고!

1개의 댓글

comment-user-thumbnail
2022년 6월 19일

안멍청하다!!!@@ 그럴수도 잇는것이다!!>>!!! 시행착오는 당연히있을수바께옵찌 하나씩줄여나가면 된다!! 화이팅🔥🔥😊

답글 달기