코딩테스트/[JAVA] 백준

[백준 | 2231번] 분해합

냠냠쿠 2023. 8. 16. 21:34
728x90

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

📝 나의풀이

import java.util.Scanner;
 
public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		int N = scanner.nextInt();
		int result =0;
		
		for(int i=0; i<N; i++) {
			
			int number = i;//가장 큰 생성자
			int sum = 0;
			
			while (number!=0){
				sum += number % 10;
				//각 자리수 더하기
				number /=10;
			}
			
			if(sum+i==N) {
				result =i;
				break;
			}
			
		}
		
		System.out.println(result);
	}
}
  • 한가지 착각을 하는 바람에 많이 애먹었다..
    단순히 '분해합'을 계산했었는데 생성자가 여러개 있는 자연수를 생각 하지 못했다.
    예를들어 , 245의 경우 분해합이 256 (=245 + 2+ 4+ 5) 한 개이지만,
    216의 경우 생성자가 198이 될 수도 있고 207이 될 수도 있다.
    이 경우 최솟값인 198이 답이 된다.
  • 그래서 if문으로 sum+1 ==N인경우 (i값과 각 자릿수의 누계가 같은 경우) break문으로 for문을 종료하면된다.
728x90