algorithm/baekjoon
[백준] 1009번 분산처리(파이썬)
support_u
2023. 3. 13. 08:42
문제
1009번: 분산처리
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000)
www.acmicpc.net
코드
import sys
input = sys.stdin.readline
for _ in range(int(input())):
a, b = map(int, input().split())
a %= 10
if a in [1, 5, 6]:
print(a)
continue
elif a == 0:
print(10)
elif a in [4, 9]:
if b % 2 != 0:
print(a)
continue
else:
print((a**2)%10)
continue
else:
if b % 4 == 0:
print(a**4%10)
continue
else:
print((a**(b%4))%10)
continue
해설
이 문제는 처음에 단순한게 a**b로 풀려고 했더니, 시간 초과가 나는 문제였다.
그래서 형식을 알아보고 다시 코드를 짰다.
형식은 이러하다.
일의 자리만 필요하니 10을 나눈 나머지의 a를 구한다
1 5 6 10은 제곱을 해도 1의 자리는 1 5 6 0으로 똑같다.
4 9는 4or6, 9or1이 돌아가며 나온다.
나머지는 4개가 돌아가면서 나온다.
그래서 나머지 4개는 나머지 0일때와 그외의 때를 나누어서 구해줬다