코딩쌀롱
[백준_node.js] 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로 디버깅도 낯설어서 출력초과에 시간초과에 런타임에러 등 다 겪었다😂
'개발공부' 카테고리의 다른 글
리눅스(Linux)의 역사 (0) | 2021.01.09 |
---|---|
[백준_node.js] 1076. 저항 (0) | 2021.01.07 |
논리 게이트(not, and, or, xor) (0) | 2021.01.06 |
컴퓨터 구조의 발전 과정(릴레이, 진공관, 트랜지스터) (3) | 2021.01.05 |