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 4 2 6
9 9 1

 

2 번씩 반복되는 4와 9는 홀짝으로

수의 끝자리만 가져오는 두 가지 방법

  • 문자열 활용
    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
  • 수학 문제 많이 풀어야지