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일때와 그외의 때를 나누어서 구해줬다