[Java] 백준 1009번 분산처리

xyzw·2023년 3월 15일
0

algorithm

목록 보기
4/12

문제

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

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

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

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

입력

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000)

출력

각 테스트 케이스에 대해 마지막 데이터가 처리되는 컴퓨터의 번호를 출력한다.


풀이

a를 곱할 때마다 모듈로 연산으로 나머지 구하기

a^b를 먼저 구하고 모듈로 연산을 하면 부정확한 값을 얻을 수 있다.

어차피 일의 자리수만 알면 해결되는 문제이므로,
a를 10으로 나눈 나머지에 a를 곱하고, 그 값을 10으로 나눈 나머지에 다시 a를 곱하는 일을 b번 반복한다.

int data = 1;
for(int j=0; j<b; j++) {
    data *= a;
    data %= 10;
}

전체 코드

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        List<Integer> list = new ArrayList<>();

        int t = sc.nextInt();
        for(int i=0; i<t; i++){
            int a = sc.nextInt();
            int b = sc.nextInt();
            int data = 1;
            for(int j=0; j<b; j++) {
                data *= a;
                data %= 10;
            }
            if(data == 0)
                data = 10;
            list.add(data);
        }

        for(int i=0; i<list.size(); i++)
            System.out.println(list.get(i));
    }
}

0개의 댓글