[백준 #1009] 분산처리(Python)

Updated:

문제 설명

예제 입출력

1009번은 a^b개로 주어지는 데이터를 1번부터 10번까지 있는 컴퓨터로 분산처리 할 때, 마지막 데이터가 몇번째 컴퓨터에서 처리되는 지를 알아내는 문제이다.
딱 처음 봤을 때는 뚞딲 풀었다.

First Code


for _ in range(int(input)):
    a,b=map(int, input().split())
    print(a**b%10)

내가 문제를 보자마자 짠 코드이다.
당연히 시간초과였다.
규칙을 찾아보려 노력했다.
역시 하나하나 나열해보니 뚞딲이다.
아래의 정리를 통해 찾아보겠다.

PDH의 정리
- 제곱을 진행하면 일의 자리 수는 반복된다.
- 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
- 10 : 0 (주의할 것)

PDH의 정리를 보면 바로 코드를 짤 수 있다.
시간초과 때문에 무서워서 바로 input() 대신 sys.stdin.readline()을 사용했다.
길긴 하지만… 조금이라도 시간을 줄여준다.
자신을 출력하는 친구들은 바로 출력하고 10은 주의하라고 PDH 정리에 나와 있으므로 주의했다.
주의할 점이 하나 더 있었는데 b%4의 값이 0일 수 있기 때문에 4를 더해서 계산을 진행했다.
4로 통일한 이유는 4,6이 4,6,4,6 이런식으로 반복되므로 상관없기 때문이다.

Code


import sys
self_list=[1,5,6,0]
for _ in range(int(sys.stdin.readline())):
    a,b=map(int, sys.stdin.readline().split())
    a%=10
    if a in self_list:
        if a==0:
            print(10)
        else:
            print(a)
    else:
        b=4+b%4
        a=str(a**b)
        print(a[-1])

Leave a comment