문제📖
풀이🙏
- 총 데이터의 개수는 항상 a^b개의 형태로 주어진다.
- 시간 제한 : 1초, 메모리 제한 : 128 MB
- 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다.
- 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다.
- 각 테스트 케이스에 대해 마지막 데이터가 처리되는 컴퓨터의 번호를 출력하라.
-> 처음엔 수를 입력받고 그 수를 제곱하여 10으로 나눈 수를 출력하는 코드를 작성했지만 수가 너무 커지면 제곱하는데 시간이 너무 오래걸려 1초의 시간 제한안에 코드를 돌릴 수 없어 실패했다.
-> 구글링을 해보니, 각 1~9까지의 수는 제곱할 때 마다 나오는 수의 규칙이 있어 그 규칙에 맞게 출력하면 시간을 대폭 줄일 수 있었다.
코드💻
수정 전
import sys
T = int(input())
ab_list = []
result = []
for _ in range(T):
ab = list(map(int,input().split()))
ab_list.append(ab)
for i in ab_list:
bunsan = i[0]**i[1]
bunsan %= 10
result.append(bunsan)
print("\n".join(map(str,result)))
수정 후
n = int(input())
for _ in range(n):
a, b = map(int, input().split())
a = a % 10
if a == 0:
print(10)
elif a == 1 or a == 5 or a == 6:
print(a)
elif a == 4 or a == 9:
b = b % 2
if b == 1:
print(a)
else:
print((a * a) % 10)
else:
b = b % 4
if b == 0:
print((a ** 4 ) % 10 )
else:
print((a ** b) % 10)
결과😎
출처 && 깃허브📝
https://www.acmicpc.net/problem/1009
github