9로 나눈 나머지

https://school.programmers.co.kr/learn/courses/30/lessons/181914

문제설명

음이 아닌 정수를 9로 나눈 나머지는 그 정수의 각 자리 숫자의 합을 9로 나눈 나머지와 같은 것이 알려져 있습니다.

이 사실을 이용하여 음이 아닌 정수가 문자열 number로 주어질 때, 이 정수를 9로 나눈 나머지를 return 하는 solution 함수를 작성해주세요.

입출력 예시

내 코드

function solution(number) {
	return number.split('').map(Number).reduce((a,b)=>a+b)%9
}

console.log(solution("123"))

코드 풀이

function solution(number) {
// 인수로 받은 값을 배열로 만들어준후 다 더해준후 9로 나눈 나머지 값을 출력한다. 
	return number.split('').map(Number).reduce((a,b)=>a+b)%9
}

console.log(solution("123"))

🧐 숫자 값의 크기는 64비트만 저장가능하다.

처음 내 코드

function solution(number) {
	 return Number(number)%9
}

console.log(solution("123")) //6
//왜 2가 아니라 5가 나오는 것일까?
console.log(solution("78720646226947352489")) //5

틀린이유

숫자는 64비트 부동소수점 형식으로 명시되어 있으며, 숫자를 저장하려면 정확히 64비트가 필요하다. 그래서 숫자가 너무 커지면 64비트 공간이 넘쳐서 Infinity로 처리된다.

console.log(78720646226947352489) //78720646226947360000

🧐 위의 코드처럼 64비트를 넘는 숫자를 출력하면 64비트가 넘는 숫자는 저장이 안되어 위 코드처럼 출력된다. 그래서 console.log(solution("78720646226947352489")) 의 값이 2가 아닌 787206462269473600009로 나눴을때 나오는 나머지 값인 5가 나오는 것이다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN