반응형
https://www.acmicpc.net/problem/1009
입력
입력의 첫 줄에는 테스트 케이스의 개수 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
*/
}
}
끝.
반응형
'알고리즘 문제 > 백준' 카테고리의 다른 글
[백준 알고리즘] 1037번 약수 (0) | 2020.08.01 |
---|---|
[백준 알고리즘] 1026번 보물 (0) | 2020.08.01 |
[백준 알고리즘] 1012번 유기농 배추 (0) | 2020.07.31 |
[백준 알고리즘] 1010번 다리 놓기 (0) | 2020.07.31 |
[백준 알고리즘] 1004번 어린왕자 (0) | 2020.07.31 |
댓글