[백준 알고리즘] Node.js 1834. 나머지와 몫이 같은 수

2023. 3. 21. 15:44코딩연습

1. 문제

https://www.acmicpc.net/problem/1834

 

1834번: 나머지와 몫이 같은 수

N으로 나누었을 때 나머지와 몫이 같은 모든 자연수의 합을 구하는 프로그램을 작성하시오. 예를 들어 N=3일 때, 나머지와 몫이 모두 같은 자연수는 4와 8 두 개가 있으므로, 그 합은 12이다.

www.acmicpc.net

 

2. 풀이

1) 나머지와 몫이 같은 숫자를 찾는 문제이다. 

2) N=3일때, 4 / 3 = 1, 4 % 3 = 1 이므로 4, 8 / 3 = 2, 8 % 3 = 2 이므로 8 이 해당되어 두 값을 더하면 12.

3) 패턴을 찾아보면

N=2일때, 3

N=3일때, 4 + 8 = 12

N=4일때, 5 + 10 + 15 = 30

N=5일때, 6 + 12 + 18 + 24 = 60

....

N = x 일때, 1 * (x+1) + 2 * (x+1) + ... + (x-1) * (x+1) = 합계

코드에 대입해보면, sum = i * (input + 1)

이 패턴대로 코드를 입력한 결과이다.

const input = BigInt(require('fs').readFileSync('/dev/stdin').toString().trim());

let sum = 0n;
for(let i = 1n; i < input; i++){
    sum += i * (input + 1n);
}

console.log(sum.toString());

 

3. 정리

- 처음에 자료형을 Number 형태로 주었더니 입력값 2000000 을 입력했을 때 출력 값과 다른 값이 나왔었다.

N 이 가능한 숫자가 2,000,000 이하의 숫자라고 했으므로 나머지와 몫이 같은 숫자의 개수가 1999999개가 되어 int의 범위를 벗어나게 된다. 그렇기 때문에 BigInt()를 이용하여 자료형을 변경해주었다.