코딩쌀롱

[백준_node.js] 1009. 분산처리 본문

개발공부

[백준_node.js] 1009. 분산처리

이브✱ 2021. 1. 7. 09:31

문제

백준 1009 분산처리 문제

1번 데이터는 1번 컴퓨터, 2번 데이터는 2번 컴퓨터, ..., 10번 데이터는 10번 컴퓨터, 11번 데이터는 1번 컴퓨터, 반복되고, 총 데이터의 개수는 a의 b승개의 형태로 주어진다. 입력 첫 줄은 테스트 케이스의 개수 T, 그 다음 줄 부터 각각의 테스트 케이스에 대해 정수 a와 b가 주어진다.( 1 ≤ a ≤ 100, 1 ≤ b < 1,000,000)데이터를 처리할 컴퓨터 번호를 출력하는 문제

 

나의 풀이

a의 b승 수의 일의 자리 숫자가 곧 컴퓨터 번호가 된다.(0일 때는 10) 그래서 a의 b승을 구하고 일의 자리 숫자를 반환하려고 했다. 그런데 9의 635승처럼 큰 수는 Infinity가 나온다. 그리고 성능 상으로도 좋지 않을 것 같아 수정해야 했다.

 

1. a, b 숫자 작게 만들기

같은 수가 계속 곱해졌을 때 일의 자리수 패턴은 아래와 같다.

 

제곱반복
일의 자리수
2     2, 4, 8, 6, 2, 4, 6, 8, ...
3     3, 9, 7, 1, 3, 9, 7, 1, ...
4     4, 6, 4, 6, ...
5     5, 5, 5, 5, ...
6     6, 6, 6, 6, ...
7     7, 9, 3, 1, 7, 9, 3, 1, ...
8     8, 4, 2, 6, 8, 4, 2, 6, ...
9     9, 1, 9, 1, ...

 

일의 자리수가 최대 4개까지만 반복이 계속 된다. 그래서 제곱의 자리인 b를 4로 나눈 나머지로 연산해 수를 줄였다.(14번줄) 그리고 모든 수는 0~9로 이루어져있고, 제곱계산을 했을 때 일의 자리수가 반복되는 패턴은 모두 같으므로 a를 10으로 나눈 나머지로 연산했다.(13번줄)

 

 

2. 곱할 때 일의 자리수만 곱하기

a의 수를 b번 곱할 때마다 일의 자리수만 골라 다시 a에 대입해서 반복하도록 했다.(18~22번줄) a**b나 Math.pow(a, b)로 연산한 다음 일의 자리수만 골라 반환해도 정답에는 상관없지만 둘 다 해본 결과 시간차이, 메모리차이가 조금 있고, 전자가 아주 조금이지만 효율적인 것 같아 블로그에는 전자의 경우인 코드로 올린다.

 

node.js로 입력받는 걸 찾아보는 데에만 시간을 많이 썼다....node.js로 디버깅도 낯설어서 출력초과에 시간초과에 런타임에러 등 다 겪었다😂

Comments