본문 바로가기
알고리즘 문제/백준

[백준 알고리즘] 1009번 분산처리

by 에르주 2020. 7. 31.
반응형

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

 

1009번: 분산처리

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

www.acmicpc.net

입력

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

출력

각 테스트 케이스에 대해 마지막 데이터가 처리되는 컴퓨터의 번호를 출력한다.

 

 

풀이

N번 데이터는 N번 일의 자리 숫자 컴퓨터 번호가 처리한다.

 

나는 9개의 배열을 만들어 각 숫자의 일의 자리 수를 넣어 정리하였다. 왜냐하면 일의 자리 숫자는 거듭제곱을 진행하며 주기적으로 반복되기 때문이다.

 

일단 밑을 통해 각 해당 하는 배열(ex. first[], second[]. thirdth[] ...) 을 파악하고 제곱수를 통해 각 배열에서 몇번째에 해당하는지만 파악하면 처리 컴퓨터 번호를 파악할 수 있다.

  
#include<iostream>
#include<stdio.h>
#include<math.h>

using namespace std;

int main() {

	int term;
	cin >> term;

	while (term--) {

		int a, b;
		long answer=0;

		cin >> a >> b;


		int first[2] = {0,1};
		int second[5] = { 0,2,4,8,6 };
		int thirdth[5] = { 0,3,9,7,1 };
		int fourth[3] = { 0,4,6 };
		int fiveth[2] = { 0,5 };
		int sixth[2] = { 0,6 };
		int seventh[5] = { 0,7,9,3,1 };
		int eigth[5] = { 0,8,4,2,6 };
		int nineth[3] = { 0,9,1 };
		int tenth[2] = { 10,10 };

		if (b == 0) {

			answer = 1;
		}

		else {

		a = a % 10;
		//cout << "a의 값 : " << a << endl;

		switch (a) {

		case 1: {

			answer = first[1]; // 1가지
			break;
		};
		case 2: {

			b = b % 4; //4가지
			answer = second[b];
			if (b == 0) answer = second[4];
			break;
		}
		case 3: {

			b = b % 4; //4가지
			answer = thirdth[b];
			if (b == 0) answer = thirdth[4];
			break;
		}
		case 4: {

			b = b % 2; //2가지
			answer = fourth[b];
			if (b == 0) answer = fourth[2];
			break;
			}
		case 5: {

			answer = fiveth[1]; //1가지
			break;

			}
		case 6: {

			answer = sixth[1]; //1가지
			break;

			}
		case 7: {

			b = b % 4;
			answer = seventh[b]; //4가지
			if (b == 0) answer = seventh[4];
			break;


			}
		case 8: {

			b = b % 4;
			answer = eigth[b]; //4가지
			if (b == 0) answer = eigth[4];
			break;
			}
		case 9: {

			b = b % 2;
			answer = nineth[b]; //2가지
			if (b == 0) answer = nineth[2];
			break;
			}
		case 0: {

			answer = tenth[1];
			break;
			}

			default: break;

		}

		cout << answer << endl;


		}
		/*
		1
		2 4 8 6
		3 9 7 1
		4 6
		5
		6
		7 9 3 1
		8 4 2 6
		9 1
		0 0
		*/



	}
}

 

끝.

반응형

댓글