10개의 컴퓨터에 a^b 개의 데이터가 주어질 때 마지막 데이터를 처리할 컴퓨터의 번호를 찾아야 한다.
컴퓨터 번호에 따른 데이터 번호들을 살펴보자.
데이터의 일의 자릿수와 해당 데이터를 처리하는 컴퓨터의 번호가 같다.
예제 입력을 예로 살펴보자.
예제 입력
5 // 테스트 케이스
1 6 // 1^6 개의 데이터 => 6개의 데이터, 마지막 데이터 6번 컴퓨터가 처리
3 7 // 3^7 개의 데이터 => 2187개의 데이터, 마지막 데이터 7번 컴퓨터가 처리
6 2 // 6^2 개의 데이터 => 36개의 데이터, 마지막 데이터 6번 컴퓨터가 처리
7 100 // 7^100 개의 데이터
9 635 // 9^635 개의 데이터
a를 b만큼 곱한 결과값에서 일의 자리 수만 알면 마지막 데이터가 몇 번 컴퓨터에서 처리되는지 알 수 있다.
예를 들어 데이터가 12일 경우, 일의 자리는 10으로 나눈 나머지로 구할 수 있다.
만약 123일 경우라면 100으로 나눈 나머지로 구해야 한다.
하지만 a는 100보다 작은 정수로 제한되어 있기 때문에 세자리 수까지 고려하지 않아도 된다.
즉, 결과값을 10으로 나누었을 때 나머지만 기억하고 있으면 된다.
마지막으로 나머지가 0일 경우는 0번 컴퓨터는 존재하지 않기 때문에 10번 컴퓨터로 값을 변경해주는 코드가 필수적이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int TC = Integer.parseInt(br.readLine());
int a, b, sum=1;
for(int i=0; i<TC; i++) {
sum=1;
StringTokenizer st = new StringTokenizer(br.readLine());
a = Integer.parseInt(st.nextToken());
b = Integer.parseInt(st.nextToken());
for(int j=0; j<b; j++) {
sum *= a;
if(sum > 10)
sum%=10;
}
if(sum == 0)
sum=10;
System.out.println(sum);
}
}
}
[출처]
https://www.acmicpc.net/problem/1009
'CODING > BAEKJOON' 카테고리의 다른 글
[BAEKJOON] 8958번 OX퀴즈 (0) | 2022.01.24 |
---|---|
[BAEKJOON] 1152번 단어의 개수 (0) | 2022.01.24 |
[BAEKJOON] 15596번 정수 N개의 합 (0) | 2022.01.24 |
[BAEKJOON] 2753번 윤년 (0) | 2022.01.24 |
[BAEKJOON] 1000번 A+B (0) | 2022.01.19 |
댓글