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 |