큰 수 (BIG)

문제

언어

  • JavaScript

순서도

  1. 실제 사람이 큰 수를 나누는 방식대로 나누기 구현

문제 풀이 step 1

  • 큰 수가 주어지는데 그것을 20000303 으로 나눈 나머지를 구하는 문제입니다.
  • 수가 너무 커서, BigInt 형으로 변환 후에 나누기를 해도 시간초과 발생합니다.
  • 그래서 단순하게 나머지 연산을 사용해서는 풀 수 없고, 나누는 과정을 구현해야 합니다.
  • 구현하는 방법은 우리가 실제 수학문제를 풀 때, 큰 수를 나눌 때 사용하는 방식을 그대로 코드로 옮기면 됩니다. 백준 14928번 실제 나누기 과정
    • 위의 사진 처럼 수의 맨 앞에서부터 나눌 수 있다면 나눕니다.
    • 그리고 나눈 나머지를 뒤의 수와 더하며 이 과정을 반복합니다.
  • 최종적으로 나온 나머지를 출력하면 정답입니다.
  • 추가 설명은 주석으로 작성하겠습니다.

후기

  • 꼭 다시 풀어볼 문제입니다.
  • 엄청나게 큰 수를 나눌 때는 단순 나머지 연산보다는 우리가 초등학교 때 배웠던 그 나누기 연산이 더 빠르다는 것을 깨달을 수 있었습니다.

소스 코드

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));