알고리즘/문제

[백준] 1009번 문제 - JAVA

Retro Rat 2026. 3. 5. 14:18

https://www.acmicpc.net/problem/1009

 

[문제]


[해설]

1.  문제 이해

재용이는 10대의 컴퓨터를 가지고 있고, 데이터는 다음 규칙으로 처리된다.

  • 1번 데이터 → 1번 컴퓨터
  • 2번 데이터 → 2번 컴퓨터
  • ...
  • 10번 데이터 → 10번 컴퓨터
  • 11번 데이터 → 1번 컴퓨터
  • 12번 데이터 → 2번 컴퓨터

데이터 번호의 끝자리 숫자가 처리할 컴퓨터 번호가 된다.

문제에서 데이터의 총 개수는 a^b 형태로 주어진다.
따라서 우리가 구해야 하는 것은

a^b의 마지막 자리 숫자

이다.

단, 끝자리가 0이면 10번 컴퓨터가 처리하게 된다.

 

2.  핵심 아이디어

컴퓨터 번호는 데이터 번호의 끝자리로 결정된다.

따라서 우리는 다음을 구하면 된다.

a^b % 10
 

하지만 b의 최대값이 1,000,000이기 때문에 Math.pow()로 큰 수를 직접 계산하면
값이 매우 커져서 문제가 생길 수 있다.

그래서 곱할 때마다 10으로 나눈 나머지를 유지하는 방법을 사용한다.

예를 들어

num = (num × a) % 10
 

이렇게 하면 항상 끝자리만 유지할 수 있다.


[코드]

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();

        for (int i=0; i<T; i++) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            int num = 1;

            // a^b를 계산하고 10으로 나눈 나머지를 구한다.
            for (int j=1; j<=b; j++) {
                num *= a;
                num %= 10;
            }

            if (num == 0) {
                num = 10;
            } 
            System.out.println(num);
        }

        sc.close();
    }

'알고리즘 > 문제' 카테고리의 다른 글

[백준] 2566번 문제 - JAVA  (0) 2026.03.09
[백준] 10810번 문제 - JAVA  (0) 2026.03.09
[백준] 25494번 문제 - JAVA  (0) 2026.03.08
[백준] 1037번 문제 - JAVA  (0) 2026.03.05
[백준] 1032번 문제 - JAVA  (0) 2026.03.05