본문 바로가기
CODING/BAEKJOON

[BAEKJOON] 1009번 분산 처리

by snow_white 2022. 1. 24.


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

 

1009번: 분산처리

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

www.acmicpc.net

 

'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

댓글