이 튜토리얼에서는 데모 수(Demlo number)에 대해 알아보겠습니다.
데모 수는 1, 11, 111, 1111처럼 1로만 이루어진 숫자를 제곱한 값을 의미합니다. 데모 수는 항상 다음과 같은 대칭적인 패턴을 가지기 때문에 규칙만 알면 쉽게 구할 수 있습니다.
1 2 3 4 5 ... n-2 n-1 n n-1 n-2 ... 5 4 3 2 1
즉, 1부터 n까지 차례로 증가한 뒤, 다시 n-1부터 1까지 감소하는 형태입니다.
이번 문제에서는 1로만 이루어진 숫자가 주어지며, 해당 숫자의 데모 수를 구해야 합니다. 예시를 살펴보겠습니다.
입력 − 1111111
출력 − 1234567654321
문제 해결 접근 방법
데모 수를 구하는 과정은 다음 단계로 진행됩니다.
- 주어진 숫자를 문자열 형태로 초기화합니다.
- 데모 수를 저장할 빈 문자열을 준비합니다.
- 1부터 숫자의 길이 n까지 반복하면서 각 숫자를 결과 문자열에 추가합니다.
- 이어서 n-1부터 1까지 역순으로 반복하면서 숫자를 추가합니다.
- 완성된 데모 수를 출력합니다.
C++ 구현 예제
위 알고리즘을 코드로 구현하면 다음과 같습니다.
#include <bits/stdc++.h>
using namespace std;
string getDemloNumber(string str) {
int len = str.length();
string demloNumber = "";
for (int i = 1; i <= len; i++) {
demloNumber += char(i + '0');
}
for (int i = len - 1; i >= 1; i--) {
demloNumber += char(i + '0');
}
return demloNumber;
}
int main() {
string str = "1111111";
cout << getDemloNumber(str) << endl;
return 0;
}
실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
1234567654321
마무리
데모 수는 복잡한 곱셈 연산 없이 문자열 조작만으로 손쉽게 구할 수 있다는 점이 매력적입니다. 다만 위 구현은 각 자릿수를 문자 하나로 표현하기 때문에 입력 길이가 9 이하일 때 정확하게 동작한다는 점을 참고하세요. 튜토리얼에 대해 궁금한 점이 있다면 댓글로 남겨주세요.