문제
여러 수가 주어지는데, 각 수의 마지막 자리가 지수이고 나머지가 밑이다. 모든 수의 거듭제곱 합을 구하라.
입력
첫째 줄에 수의 개수 N, 이후 N개의 수가 주어진다 (예: 123은 밑 12, 지수 3).
출력
모든 거듭제곱의 합을 출력한다.
예제
| 입력 | 출력 |
|---|---|
2 123 24 | 1744 |
풀이
각 수에서 밑과 지수를 분리하여 거듭제곱을 계산하고 합산한다.
- 입력값을 10으로 나눈 몫이 밑, 나머지가 지수이다
pow(밑, 지수)로 거듭제곱을 계산한다- 모든 결과를
long long으로 합산하여 출력한다
핵심 아이디어: 숫자의 마지막 자리를 분리하는 것은 % 10과 / 10 연산으로 간단히 처리된다.
코드
#include <iostream>
#include <cmath>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
long long sum = 0;
for (int i = 0; i < N; i++)
{
int temp;
cin >> temp;
sum += pow(temp / 10, temp % 10);
}
cout << sum << "\n";
return 0;
}복잡도
- 시간: O(N) (N: 입력 수의 개수)
- 공간: O(1)