숫자 N이 주어졌을 때, 이 숫자가 오각수(pentagonal number)인지 판별하는 것이 목표입니다. 오각수는 점들을 배열하여 오각형 형태를 만들 수 있는 수를 말하며, 각 단계마다 점들이 오각형 테두리를 따라 배치됩니다. 대표적인 오각수로는 1, 5, 12, 22, 35, 51 등이 있습니다.
오각수 판별 공식
다음 공식을 활용하면 어떤 숫자가 오각수인지 손쉽게 확인할 수 있습니다.
$$p(n)=\frac{3n^2-n}{2}$$
여기서 n은 해당 오각형을 구성하는 점의 개수를 의미합니다. 역으로, 주어진 수 N에 대해 이 식을 만족하는 자연수 n이 존재하는지 검사하면 됩니다.
예시
입력: n = 22 출력: 22은(는) 오각수입니다. 입력: n = 23 출력: 23은(는) 오각수가 아닙니다.
알고리즘
Start
Step 1 -> N이 오각수인지 확인하는 함수 선언
bool check(int n)
변수 선언: int i = 1, a
do
a = (3*i*i - i)/2 계산
i += 1
while (a < n);
return (a == n);
Step 2 -> main() 함수에서
int n = 22 선언
if (check(n))
"오각수입니다" 출력
else
"오각수가 아닙니다" 출력
StopC++ 코드 구현
#include <iostream>
using namespace std;
// N이 오각수인지 확인하는 함수
bool check(int n){
int i = 1, a;
do{
a = (3*i*i - i)/2;
i += 1;
}
while ( a < n );
return (a == n);
}
int main(){
int n = 22;
if (check(n))
cout << n << " is pentagonal " << endl;
else
cout << n << " is not pentagonal" << endl;
return 0;
}실행 결과
22 is pentagonal
동작 원리 설명
check 함수는 i를 1부터 시작해 하나씩 증가시키며 각 i에 대한 오각수 값을 계산합니다. 계산된 값 a가 입력값 n보다 커질 때까지 do-while 반복문을 수행한 뒤, 마지막으로 계산된 a가 n과 정확히 일치하는지 비교합니다. 두 값이 일치하면 n은 오각수이고, 그렇지 않으면 오각수가 아닙니다. 위 예제에서는 n = 22일 때 a가 정확히 22가 되므로 "22 is pentagonal"이 출력됩니다.