BOJ[14928] - 큰 수 (BIG) by JavaScript
큰 수 (BIG)
문제
언어
- JavaScript
순서도
- 실제 사람이 큰 수를 나누는 방식대로 나누기 구현
문제 풀이 step 1
- 큰 수가 주어지는데 그것을 20000303 으로 나눈 나머지를 구하는 문제입니다.
- 수가 너무 커서, BigInt 형으로 변환 후에 나누기를 해도 시간초과 발생합니다.
- 그래서 단순하게 나머지 연산을 사용해서는 풀 수 없고, 나누는 과정을 구현해야 합니다.
- 구현하는 방법은 우리가 실제 수학문제를 풀 때, 큰 수를 나눌 때 사용하는 방식을 그대로 코드로 옮기면 됩니다.
- 위의 사진 처럼 수의 맨 앞에서부터 나눌 수 있다면 나눕니다.
- 그리고 나눈 나머지를 뒤의 수와 더하며 이 과정을 반복합니다.
- 최종적으로 나온 나머지를 출력하면 정답입니다.
- 추가 설명은 주석으로 작성하겠습니다.
후기
- 꼭 다시 풀어볼 문제입니다.
- 엄청나게 큰 수를 나눌 때는 단순 나머지 연산보다는 우리가 초등학교 때 배웠던 그 나누기 연산이 더 빠르다는 것을 깨달을 수 있었습니다.
소스 코드
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n");
const solution = (input) => {
const MOD = 20000303;
const nums = input[0];
let remainder = 0;
for (let i = 0; i < nums.length; i++) {
let num = Number(nums[i]);
// 나눌 수 있으면 나누고, 나눈 나머지에 10 을 곱해가며 뒤의 수를 더하며, 이 과정을 반복
remainder = (remainder * 10 + num) % MOD;
}
return remainder;
};
console.log(solution(input));