문제
재용이는 최신 컴퓨터 10대를 가지고 있다. 어느 날 재용이는 많은 데이터를 처리해야 될 일이 생겨서 각 컴퓨터에 1번부터 10번까지의 번호를 부여하고, 10대의 컴퓨터가 다음과 같은 방법으로 데이터들을 처리하기로 하였다.
1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, 3번 데이터는 3번 컴퓨터, ... ,
10번 데이터는 10번 컴퓨터, 11번 데이터는 1번 컴퓨터, 12번 데이터는 2번 컴퓨터, ...
총 데이터의 개수는 항상 ab개의 형태로 주어진다. 재용이는 문득 마지막 데이터가 처리될 컴퓨터의 번호가 궁금해졌다. 이를 수행해주는 프로그램을 작성하라.
#solution1
처음엔 아무 생각없이 접근했다
import sys
test_case = int(input())
for i in range(test_case):
a,b = map(int,sys.stdin.readline().split())
print(a ** b % 10)
당연히 시간초과로 실패 했다..
#solution2
시간초과를 어떻게 해결할까를 고민하던 중 제곱근 규칙을 이용해서 연산을 줄이면 된다고 생각해서 연산을 최대한 줄여서 시도 했다.
import sys
def cp_num(a,b):
result = 1
for _ in range(b):
result *= a
result = result % 10
return result if result != 0 else 10
test_case = int(input())
for i in range(test_case):
a,b = map(int,sys.stdin.readline().split())
if a in [1,5,6]:
print(a)
else:
if(b % 4 == 0):
b = 4
print(cp_num(a,b))
else:
print(cp_num(a,b %4))
이 코드로 시도했을때 성공 했다.
댓글