본문 바로가기

Coding Test/Step12. 브루스 포트

[Java] 2단계. 분해합 [2231번]

  • 예제 입력1
216
  • 예제 출력1
198

  • 문제 접근
    • 어떤 자연수 M + M의 각 자릿수 = N이라 할 때, M은 N의 생성자
    • 생성자는 없는 경우도 있고 그럴 경우 0을 출력
  • 문제 해결
    • 자릿수를 간편하게 구하기 위해 문자열로 입력 받아 .length() 함수로 자릿수 구하기
    • 각 자릿수의 최댓값은 9이므로 생성자의 최솟값은 N - N 자릿수 * 9
    • 생성자가 나오는 즉시 종료
  • 슈도 코드
N (어떠한 수 문자열로 저장)
constructor(생성자를 저장한 변수 선언)
start(N - N의 자릿수 * 9)
for(i = start ~ N까지 반복){
	sum (i값 저장)
	tmp (i값 저장)
	while(tmp % 10 != 0){
		sum += tmp % 10
		tmp/=10
	}
	if(sum==N){
		constructor = i;
		break;
	}
}
construct 출력
  • 코딩하기
public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    String tmpN = scan.next();
    scan.close();
    int N = Integer.parseInt(tmpN);
    int constructor = 0;
    int start = N - (tmpN.length() * 9);
    for(int i = start; i < N; i++){
        int sum = i;
        int tmp = i;
        while(tmp > 0){
            sum += tmp % 10;
            tmp /= 10;
        }
        if(sum == N){
            constructor = i;
            break;
        }
    }
    System.out.println(constructor);
}

최솟값의 생성자를 구하기 때문에 constructor가 나오는 순간 바로 반복문 종료