백준 BaekJoon 1402번: 아무래도이문제는A번난이도인것같다 [Java]

2021-03-08


문제

어떤 정수 A가 있으면 그 숫자를 A = a1 * a2 * a3 * a4 ... * an으로 했을 때 A' = a1 + a2 + a3 ... + an이 성립하면 "A는 A'으로 변할 수 있다"라고 한다. (ai는 정수) 만약 A'이 A''으로 변할 수 있으면 "A는 A''으로 변할 수 있다"라고 한다.

이때 A와 B가 주어지면 A는 B로 변할 수 있는지 판별하시오.

입력

첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 100)이 주어진다. 테스트 케이스마다 두 정수 A, B(-231 ≤ A, B ≤ 231-1)가 주어진다.

출력

각각의 테스트 케이스마다 한 줄에 변할 수 있으면 yes, 아니면 no를 출력한다.

힌트

6 = 2*3, 2+3=5이므로 성립한다.


소스코드

 

import java.util.Scanner;

public class TemplateA {	
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);

		int tCase = scan.nextInt();

		for(int i = 0; i < tCase; i++) {
			int a = scan.nextInt();
			int b = scan.nextInt();
			int [] arr = new int [a];

			int temp = 2;
			//소인수 분해를 위해 사용될 변수
			int t = 0;
			//배열위치지정변수
			while(a != 1) {
				if(a % temp == 0) {
					//a 의 소인수 여부 체크
					arr[t] = temp;
					//소인수 배열 할당
					a = a / temp;
					//a 값 소인수로 나누어서 초기화
					t++;
					//배열위치 하나씩 증가
				}else {
					temp++;
					//소인수 아니면 하나씩 증가
				}
			}

			int sum = 0;
			for(int j = 0; j < arr.length; j++) {	
				if(arr[j] == 0){break;}
				sum +=arr[j];
			}
			//소인수값 sum에 모두 더해줌

			System.out.println(sum);
			if(sum == b) {
				System.out.println("yes");
			}else {
				System.out.println("no");
			}
			//sum과 b가 같은지 체크

		}
	}
}

 

출처링크 : www.acmicpc.net/problem/1402

 

1402번: 아무래도이문제는A번난이도인것같다

첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 100)이 주어진다. 테스트 케이스마다 두 정수 A, B(-231 ≤ A, B ≤ 231-1)가 주어진다.

www.acmicpc.net