[백준 1009] 분산처리 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
a의 b제곱 번째 데이터를 처리하는 컴퓨터 번호를 구하는 문제입니다. 컴퓨터는 1번부터 10번까지 있고, 데이터 번호의 일의 자리가 컴퓨터 번호가 됩니다. 일의 자리가 0이면 10번 컴퓨터입니다.
접근법
먼저, 어떤 수의 거듭제곱에서 일의 자리는 4를 주기로 반복됩니다. 예를 들어, 2의 거듭제곱은 2, 4, 8, 6, 2, 4, 8, 6, …으로 일의 자리가 순환합니다.
다음으로, a의 일의 자리만 취하고 b를 4로 나눈 나머지를 구합니다. 나머지가 0이면 4로 대체하여 한 주기를 완성합니다.
이후, 작은 지수(1에서 4 사이)만큼만 거듭제곱하여 일의 자리를 구합니다. 결과가 0이면 10번 컴퓨터를 의미합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
class Program {
static void Main() {
var T = int.Parse(Console.ReadLine()!);
for (var tc = 0; tc < T; tc++) {
var s = Console.ReadLine()!.Split();
var a = int.Parse(s[0]);
var b = int.Parse(s[1]);
var baseDigit = a % 10;
var exp = b % 4;
if (exp == 0) exp = 4;
var res = 1;
for (var i = 0; i < exp; i++)
res = (res * baseDigit) % 10;
if (res == 0) res = 10;
Console.WriteLine(res);
}
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T; cin >> T;
while (T--) {
int a, b; cin >> a >> b;
int base = a % 10;
int exp = b % 4;
if (exp == 0) exp = 4;
int res = 1;
for (int i = 0; i < exp; i++) res = (res * base) % 10;
if (res == 0) res = 10;
cout << res << "\n";
}
return 0;
}