본문 바로가기
STUDY/Python

[백준] 1009번 분산처리 파이썬 코드

by 미나이러바니 2020. 10. 10.

 

백준 문제 url

www.acmicpc.net/problem/1009

 

1009번: 분산처리

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다. (1 ≤ a < 100, 1 ≤ b < 1,000,000)

www.acmicpc.net

 

 

<시간 초과 코드>

num = int(input())
list = []

for i in range(num):
    a,b = map(int, input().split())
    list.append(a**b)

for i in range(num):
    print(10 if list[i]%10 == 0 else list[i]%10)

당연히 시간 초과될 줄 알았지만 다른 방법으로 하는 데 애 먹었다.

 

<코드>

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
0 10

각 수를 거듭제곱 했을 때 10으로 나눈 나머지 값은 규칙적인 형태를 띤다. 그 수는 위와 같다.

예를 들어, 22, 32를 거듭제곱 했을 때 10으로 나눈 나머지도 2와 같은 2, 4, 6, 8이 된다.

이런 규칙을 활용하여 a를 10으로 먼저 나눈 나머지 값으로 변경.

list 안에 나오는 형태를 먼저 넣어주고 값이 1개일 때, 2개일 때, 4개일 때 각각 분리해서 2개일 경우와 4개일 경우에는 지수(b)를 나누어주었다. 

여기서 조심할 부분은 2^4일경우 답은 6이 되는데 4를 4로 나누면 0이 되어 마지막 값을 다 리스트 0위 치에 삽입하였다.

num = int(input())
result = []
list = [[10],[1],[6,2,4,8],[1,3,9,7],[6,4],[5],[6],[1,7,9,3],[6,8,4,2],[1,9]]
for _ in range(num):
    a, b = map(int, input().split())
    a = a%10
    if a == 0 or a == 1 or a == 5 or a == 6:
        result.append(list[a][0])
    elif a == 4 or a == 9:
        result.append(list[a][b%2])
    else:
        result.append(list[a][b%4])
for i in range(num):
    print(result[i])

 

댓글