Baekjoon Online Judge
문제
재용이는 최신 컴퓨터 10대를 가지고 있다. 어느 날 재용이는 많은 데이터를 처리해야 될 일이 생겨서 각 컴퓨터에 1번부터 10번까지의 번호를 부여하고, 10대의 컴퓨터가 다음과 같은 방법으로 데이터들을 처리하기로 하였다.
1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, 3번 데이터는 3번 컴퓨터, ... ,
10번 데이터는 10번 컴퓨터, 11번 데이터는 1번 컴퓨터, 12번 데이터는 2번 컴퓨터, ...
총 데이터의 개수는 항상 ab개의 형태로 주어진다. 재용이는 문득 마지막 데이터가 처리될 컴퓨터의 번호가 궁금해졌다. 이를 수행해주는 프로그램을 작성하라.
입력
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000)
출력
각 테스트 케이스에 대해 마지막 데이터가 처리되는 컴퓨터의 번호를 출력한다.
예제 입력 | 예제 출력 |
5 1 6 3 7 6 2 7 100 9 635 |
1 7 6 1 9 |
풀이
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int T; // 테스트 케이스 T
cin >> T;
for (int i = 0; i < T; i++) {
int a, b;
scanf("%d %d", &a, &b);
int num1 = b % 4;
if (num1 == 0)
num1 = 4;
// 마지막 데이터가 처리될 캄퓨터 찾기
int result = (int)pow(a % 10, num1) % 10;
if (result == 0)
result = 10;
printf("%d\n", result);
}
return 0;
}
a^b의 값은 아래와 같다.
a | b | 0 | 1 | 2 | 3 | 4 | 5 |
1 | 1 | 1 | 1 | 1 | 1 | 1 |
2 | 1 | 2 | 4 | 8 | 16 | 32 |
3 | 1 | 3 | 9 | 27 | 81 | 243 |
4 | 1 | 4 | 16 | 64 | 256 | 1024 |
5 | 1 | 5 | 25 | 125 | 625 | 3125 |
6 | 1 | 6 | 36 | 216 | 1296 | 7776 |
7 | 1 | 7 | 49 | 343 | 2401 | 16807 |
8 | 1 | 8 | 64 | 512 | 4096 | 32768 |
9 | 1 | 9 | 81 | 729 | 6561 | 69049 |
표의 숫자들의 일의 자리 숫자들을 보면 a^1부터 a^4까지의 숫자들이 반복된다는 것을 알 수 있다. 그러므로 마지막 데이터를 처리하는 컴퓨터를 찾는데는 b % 4을 사용했다.
ex)
2 : 2 > 4 > 8 > 6 > 2
3 : 3 > 9 > 7 > 1 > 3
그리고 a에서 컴퓨터를 찾는데 영향을 주는 부분인 일의 자리만 남기기 위해 a % 10 연산을 했다.
이렇게 구한 수들을 이용해 제곱을 한 뒤 그 값에 % 10 연산을 해서 값을 찾아냈다.
'백준 > C++' 카테고리의 다른 글
[Baekjoon/C++] 나누기 1075번 (0) | 2022.04.21 |
---|---|
[Baekjoon/C++] 명령 프롬프트 1032번 (0) | 2022.04.21 |
[Baekjoon/C++] 음계 2920번 (0) | 2022.04.13 |
[Baekjoon/C++] 검증수 2475번 (0) | 2022.04.13 |
[Baekjoon/C++] 정수 삼각형 1932번 (0) | 2022.04.13 |