본문 바로가기

백준/C++

[Baekjoon/C++] 분산처리 1009번

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