짱해커가 되어보자

boj 1009 본문

프로그래밍_일반/백준

boj 1009

Spadework 2020. 1. 26. 19:59

문제

문제 제목은 분산처리로 컴퓨터 10개가 주어진만큼 작업을 수행한다면, 마지막 작업은 몇번째 컴퓨터가 수행하는가? 라는 질문에 대한 답을 T 횟수 만큼 반복해주면 된다.

 

컴퓨터의 번호는 1번 ~ 10번 까지 있다. 입력받은 횟수(T) 마다 a와 b를 입력받아 a^b 만큼 연산을 수행 한 후 최종 번호를 출력하면 된다

 

a : N(1 ~ 100)

b : N(1 ~ 1,000,000)

 

입력 : T, a, b
출력 : N(1~10)

 

풀이

문제에 주어진 1초라는 제한을 보았을 때 단순 연산으로는 제한이 걸릴 것 같았다

 

제곱 연산을 수행한 후 마지막 1의 자리의 숫자만 확인하므로 a의 1~10까지 b를 반복하며 규칙성을 확인해보았다

  • 1 ^ N = 1
  • 2 ^ N = 2, 4, 8, 6 ...
  • 3 ^ N = 3, 9, 7, 1 ...
  • 4 ^ N = 4, 6 ...
  • 5 ^ N = 5
  • 6 ^ N = 6
  • 7 ^ N = 7, 9, 3, 1 ...
  • 8 ^ N = 8, 4, 2, 6 ...
  • 9 ^ N = 9, 1 ...
  • 10 ^ N = 0

 

0~9까지만 알게 되면, 이후는 반복적인 규칙이라는 것을 알 수 있었다

이를 가지고 해당 범위에서만 규칙성을 알려주는 리스트를 만들어 문제를 해결할 수 있었다

 

* 마지막 자리가 0의 경우는 문제의 출력에 맞추어 10을 출력하도록 해두었다

 

l = [[10], [1], [2,4,8,6], [3,9,7,1], [4,6], [5], [6], [7,9,3,1], [8,4,2,6], [9,1]]

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

	print(l[a][(b-1) % len(l[a])])

 

'프로그래밍_일반 > 백준' 카테고리의 다른 글

boj 10250  (0) 2020.01.26
boj 2908  (0) 2020.01.26
boj 2193  (0) 2019.12.02
boj 3052  (0) 2019.12.02
boj 2869  (0) 2019.12.02
Comments