BOJ/백준-1009-python

cosmos·2021년 3월 10일
3
post-thumbnail
post-custom-banner

문제📖

풀이🙏

  • 총 데이터의 개수는 항상 a^b개의 형태로 주어진다.
  • 시간 제한 : 1초, 메모리 제한 : 128 MB
  • 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다.
  • 그 다음 줄부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다.
  • 각 테스트 케이스에 대해 마지막 데이터가 처리되는 컴퓨터의 번호를 출력하라.
    -> 처음엔 수를 입력받고 그 수를 제곱하여 10으로 나눈 수를 출력하는 코드를 작성했지만 수가 너무 커지면 제곱하는데 시간이 너무 오래걸려 1초의 시간 제한안에 코드를 돌릴 수 없어 실패했다.
    -> 구글링을 해보니, 각 1~9까지의 수는 제곱할 때 마다 나오는 수의 규칙이 있어 그 규칙에 맞게 출력하면 시간을 대폭 줄일 수 있었다.

코드💻

수정 전

# boj, 1009 : 분산처리, python3
import sys

T = int(input())
ab_list = []
result = []

for _ in range(T):
    ab = list(map(int,input().split()))
    ab_list.append(ab)
    
for i in ab_list:
    bunsan = i[0]**i[1]
    bunsan %= 10
    result.append(bunsan)
    
print("\n".join(map(str,result)))

수정 후

n = int(input())
for _ in range(n):
    a, b = map(int, input().split())
    a = a % 10
    if a == 0:
        print(10)
    elif a == 1 or a == 5 or a == 6:
        print(a)
    # 1의 자리 수가 4와 9인 경우는 반복 되는 값이 2개 이므로 제곱수를 2로 나누어서
    # 홀수 승과 짝수 승을 비교하여 계산
    elif a == 4 or a == 9:
        b = b % 2
        if b == 1:
            print(a)
        else:
            print((a * a) % 10)
    else:
    # 4개씩 싸이클이 돌 때 마다 자기 자신이 나오므로 나누었을때 나머지가 0이라면 자기 자신을 출력
        b = b % 4
        if b == 0:
            print((a ** 4 ) % 10 )
        else:
            print((a ** b) % 10)

결과😎

출처 && 깃허브📝

https://www.acmicpc.net/problem/1009
github

post-custom-banner

0개의 댓글