프로그래밍/알고리즘

분산처리(백준: 1009 / 자바)

sungjine 2022. 2. 14. 11:03
반응형

총 데이터의 개수가 주어졌을 때 10 대의 컴퓨터에 차례로 총 데이터를 분산시켰을 때 마지막 데이터의 위치를 구하는 문제이다.

 

입력 데이터는 테스트 횟수와 테스트 데이터가 순서대로 입력된다.

 

테스트 데이터는 "A B"와 같은 형식으로 입력된다.

 

데이터의 총 수는 A에 B승한 것과 같다.

(EX: "3 7"은 "3 * 3 * 3 * 3 * 3 * 3 * 3" 와 같고 계산했을 때 "2187"이 나오게 된다.)

 

데이터의 총 갯수가 몇이던지 10개의 컴퓨터에 분산하여 배분하기 때문에 10으로 나누었을 때 나머지값이 정답이다.

 

다만 데이터의 총 개수를 먼저 구하게되면 데이터의 수가 많아질 경우 실패하게 된다.

 

따라서 데이터의 총 개수를 먼저 구하는 것이 아니라 A * A 의 위치를 구한 후 해당 위치의 다음 컴퓨터부터 다시 데이터를 넣어 위치를 구하는 방식으로 구현해야한다.

 

코드는 아래와 같다.

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 IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int t = Integer.parseInt(br.readLine());
		
		while(t-- > 0){
			String s = br.readLine();
			StringTokenizer token = new StringTokenizer(s, " ");
			int a = Integer.parseInt(token.nextToken());
			int b = Integer.parseInt(token.nextToken());
			int value = 1;
			
			for(int j = 0; j < b; j++){
				value *= a;  // 데이터 구하기
				value %= 10; // 데이터의 위치 구하기
			}
			
			sb.append(value == 0 ? 10 : value);
			// 위치가 0일 경우는 없고 컴퓨터는 1~10 까지이기 때문.
			sb.append("\n");
		}

		System.out.println(sb.toString());
	}
}
반응형