반응형
문제는 다음과 같습니다.
https://www.acmicpc.net/problem/1009
1009번: 분산처리
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000)
www.acmicpc.net
풀이 코드는 다음과 같습니다.
#include<iostream>
using namespace std;
int main()
{
int n1;
cin>>n1;
for(int i{0};i<n1;i++)
{
int n2,n3;
int temp;
cin>>n2>>n3;
temp=n2;
if(n3==1)
{
n2=n2%10;
}
else
{
for(int j{0};j<n3-1;j++)
{
n2=(temp*n2)%10;
}
}
if(n2==0)
{
n2=10;
}
cout<<n2<<endl;
}
return 0;
}
이 문제에서 핵심은 두 가지라고 생각합니다.
첫 번째로, 문제의 조건에 따라 우리는 숫자 전체가 필요하지 않다는 점입니다.
문제에서 a,b는 1 ≤ a < 100, 1 ≤ b < 1,000,000 라는 범위를 가지고 있고 형태는 (a^b) 꼴 이므로 b가 조금만 커지더라도 거듭제곱이기 때문에 기하급수적으로 값이 커져 int , long long 형태 모두 범위를 벗어날 수 있습니다. 대부분 그 정도에 대한 판단을 문제를 읽으면서 하실 수 있을 겁니다.
문제는 1번 컴퓨터부터 10번컴퓨터까지 번갈아가면서 일을 처리하기 때문에 우리는 1~10 이라는 작은 범위만 확인하면 됩니다. 그렇기 때문에 값은 10을 나눈 나머지만 확인하면 됩니다.
두 번째로, 거듭제곱을 하지 않는 경우 즉, 예외처리입니다.for문으로 하다보면 a는 a^1과 동일하므로 범위가 b-1이 됩니다. 이 때 b가 1이면 for문이 작동하지 않으므로 a가 그대로 출력되는 경우가 발생할 수 있습니다. 범위 조건에 따라 b가 0이하의 정수는 입력받지 않기 때문에 이러한 점만 확인한다면 정답을 맞출 수 있을 것입니다.
반응형
'백준 문제풀이' 카테고리의 다른 글
1598번: 꼬리를 무는 숫자 나열 (0) | 2022.03.23 |
---|---|
13311번[스페셜 저지]: 행운의 편지 (0) | 2022.03.23 |
1111번 : IQ Test (0) | 2022.03.23 |
1037번: 약수 (0) | 2022.03.23 |
1024번: 수열의 합 (0) | 2022.03.23 |