카테고리 없음

1009번: 분산처리(백준 C++)

상연 2020. 11. 19. 18:49

목차

    1009번: 정수 삼각형 링크

    코드

    #include <iostream>
    using namespace std;
    
    int main() {
        int t;
        int a, b;
        int cnt;
        cin >> t;
        for(int i=0; i<t; i++){
            cin >> a >> b;
            cnt = a % 10;
            for(int j=1; j<b; j++){
                cnt *= a;
                cnt %= 10;
            }
            if (cnt == 0) cout << 10 << endl;
            else cout << cnt << endl;
        }
        return 0;
    }

    풀이 및 사견

    문제

    재용이는 최신 컴퓨터 10대를 가지고 있다. 어느 날 재용이는 많은 데이터를 처리해야 될 일이 생겨서 각 컴퓨터에 1번부터 10번까지의 번호를 부여하고, 10대의 컴퓨터가 다음과 같은 방법으로 데이터들을 처리하기로 하였다.

    1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, 3번 데이터는 3번 컴퓨터, ... ,

    10번 데이터는 10번 컴퓨터, 11번 데이터는 1번 컴퓨터, 12번 데이터는 2번 컴퓨터, ...

    총 데이터의 개수는 항상 a^b개의 형태로 주어진다. 재용이는 문득 마지막 데이터가 처리될 컴퓨터의 번호가 궁금해졌다. 이를 수행해주는 프로그램을 작성하라.

    즉, a의 b제곱일 때 그 수의 1의자리의 수를 구하는 문제이다.

    풀이

    두 수의곱에서 1의자리는, 각각 두 수에서 1의자리가 무엇인지에 따라 달라진다.
    반대로 말하면, 1의자리 외에 다른자리 수는 아무 상관이없다.

    그렇기 때문에 a를 b번 곱해주는데, 매번 곱해준 이후에 10으로 나눈 나머지를 구해주면 된다.

    단, 최종 나머지가 0인경우, 정답으로 10을 출력해야한다는 걸 잊지 말자