정수형 값이 하나 주어집니다. 이 문제의 목표는 주어진 수가 리팩터러블 숫자(Refactorable Number)인지 판별하고, 맞다면 "리팩터러블 숫자입니다", 아니라면 "리팩터러블 숫자가 아닙니다"를 출력하는 것입니다.
리팩터러블 숫자란 무엇일까요?
리팩터러블 숫자는 자기 자신의 약수 개수로 나누어 떨어지는 수를 의미하며, '타우 숫자(tau number)'라고도 불립니다. 예를 들어, 9의 약수는 총 3개(1, 3, 9)이고 9는 3으로 나누어 떨어지므로, 9는 리팩터러블 숫자입니다.
입력 및 출력 시나리오 살펴보기
입력 − int number = 9
출력 − 리팩터러블 숫자입니다
설명 − 리팩터러블 숫자는 자신의 약수 개수로 나누어 떨어지는 수입니다. 주어진 수 9는 약수가 총 3개(1, 3, 9)이며, 9를 3으로 나누면 나머지가 없으므로 리팩터러블 숫자입니다.
입력 − int number = 10
출력 − 리팩터러블 숫자가 아닙니다
설명 − 주어진 수 10은 약수가 총 4개(1, 2, 5, 10)이지만, 10은 4로 나누어 떨어지지 않으므로 리팩터러블 숫자가 아닙니다.
프로그램에 사용된 접근 방식
정수형 변수(예: number)에 값을 입력받습니다.
값을 bool 타입 함수 check_Refactorable(int number)에 전달합니다.
함수 내부에서 다음 절차를 수행합니다.
정수형 변수 count를 선언하고 0으로 초기화합니다.
i가 1부터 sqrt(number)까지 증가하는 FOR 반복문을 실행합니다. 반복문 안에서 number % i == 0인지 확인하고, 만약 number / i == i라면 제곱근에 해당하는 약수이므로 count를 1만 증가시킵니다.
그렇지 않다면 약수가 쌍으로 존재하기 때문에 count를 2 증가시킵니다.
반복문이 끝나면 number % count == 0의 결과를 반환합니다.
반환된 결과를 바탕으로 출력합니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
bool check_Refactorable(int number){
int count = 0;
for (int i = 1; i <= sqrt(number); ++i){
if(number % i==0){
if(number / i == i){
++count;
}
else{
count += 2;
}
}
}
return number % count == 0;
}
int main(){
int number = 9;
if(check_Refactorable(number) == 1){
cout<<"It is a Refactorable number";
}
else{
cout<<"It isn't a Refactorable number";
}
return 0;
}출력 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
It is a Refactorable number