PS/BOJ&Programmers
[백준/1009] 분산 처리 | 반복되는 숫자 어떻게 효율적으로 처리할까
sebinChu
2023. 7. 3. 17:15
분산 처리
알고리즘
승수의 마지막 자리 반복
0 | 0 |
1 | 1 |
2 | 2 4 8 6 |
3 | 3 9 7 1 |
4 | 4 6 |
5 | 5 |
6 | 6 |
7 | 7 9 3 1 |
8 | 8 4 2 6 |
9 | 9 1 |
수의 끝자리만 가져오는 두 가지 방법
- 문자열 활용
a = str(a)
a = int(a[-1])
- 나머지 활용(%10, %100, %1000, ....)
a %= 10 # 끝 한 자리만
a %= 100 # 끝에서부터 2개
전체 코드
import sys; input=sys.stdin.readline
t=int(input())
for _ in range(t):
a,b = map(int,input().split())
a = str(a)
a = int(a[-1])
if a == 1 or a == 5 or a == 6: print(a)
# 4 번씩 반복되는 값들
elif a == 2 or a == 3 or a == 7 or a == 8 :
b%=4
if b == 0 : # b = 4
print(a**4%10)
else:
print(a**b%10)
# 2 번씩 반복되는 값들
elif a == 4 or a == 9 :
# 홀수일 때 4, 9 / 짝수일 때 6, 1
if b % 2 != 0:
print(a)
else:
print(a*a%10)
elif a == 0 :
print(10)
알게된 점
- 4 번씩 반복되는 값들은 승수에 4를 나누어서 1, 2, 3 중 선택. 만약 4로 나눈 나머지가 0이라면 4번째 제곱 (a**4%10)
- 2 번씩 반복되는 값들은 승수를 홀,짝으로 나누어서 계산. 만약 짝수라면 a 자체가 아닌 a*a 값이므로 a*a%10
- 수학 문제 많이 풀어야지