[백준 알고리즘: python 3] #1009 - 분산 처리
https://www.acmicpc.net/problem/1009
1009번 문제는 비교적 쉬운 문제입니다. 10대의 컴퓨터를 가지고 있는 재용이가 데이터를 분산하여 컴퓨터에 처리하도록 하는데, a^b개의 데이터를 1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, ..., 10번 데이터는 10번 컴퓨터가 처리하도록 하고 11번 데이터는 다시 1번 컴퓨터가 처리하도록 하는 규칙을 따릅니다. 문제는 마지막 데이터를 몇번 컴퓨터가 처리를 할 것인지를 알아내는 것이네요.
입력은 테스트 케이스의 수와 각 테스트 케이스마다 a와 b를 입력받습니다.
Hint!
아마, a의 일의 숫자 자리와 지수 b만 초점을 두면 풀 수 있다는 것을 쉽게 알 수 있습니다. 그래서 a의 일의 자리 숫자를 10개의 if문으로 감싸여 해결을 할 수도 있지만, 조금 다른 방법도 있습니다. 0~9까지 숫자에 지수를 적용해 계산해봤을 때 결과를 보면 1의 자리가 모두 규칙을 따른다는 것을 알 수 있습니다.
0 => 0, 0, 0, 0, 0, ...
1 => 1, 1, 1, 1, 1, ....
2 => 2, 4, 8, 6, 2 ...
3 => 3, 9, 7, 1, 3 ....
4 => 4, 6, 4, 6, ....
등등 나머지는 금방 해보시면 알 수 있습니다. 그런데, 이 10개의 숫자 모두 공통점이 있다면 규칙이 모두 4개로 묶일 수 있다는 것입니다. 0의 경우 0이 4개가 반복, 1의 경우 1이 4개가 반복, 2의 경우 2, 4, 8, 6이 반복, 3의 경우 3, 9, 7, 1이 반복입니다. 9까지의 숫자 모두 4개의 숫자 규칙으로 풀어낼 수가 있습니다. 즉, if 문 10개가 필요 없이, b를 4로 나누어 나온 나머지 만큼 제곱을 해서 나온 1의 자리를 답으로 깔끔하게 낼 수 있다는 것입니다. 한 가지 주의할 점은, b의 나머지가 0이 될 수 있기 때문에, 저는 b의 나머지를 계산하고 4을 더해주었습니다.
아래의 코드로 풀이하였습니다.
T = int(input())
results = []
for _ in range(T):
a, b = map(int, input().split())
if a % 10 == 0: results.append(10)
else:
focus = 4 + b % 4
data = str(a ** focus)
results.append(data[-1])
for result in results:
print(result)