-
[프로그래머스] 약수의 개수와 덧셈Algorithm | Data structure/문제풀이 2023. 3. 17. 22:40
Q. 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요. ( 1 ≤ left ≤ right ≤ 1000 )
알게 된 것 : 약수의 갯수가 홀수인 수는 제곱근이 정수인 수이다.
thinking
약수의 정의 : 임의의 정수 x가 임의의 정수 y로 나누어 떨어질때, y를 x의 약수라고 부른다.
여기서 만약 약수 y가 정의가 된다면 y * 몫 = x이기 때문에,
x의 약수 y가 정의 되면 사실상, x의 약수는 y와 몫 2개라는 사실을 알 수 있다.
즉, 약수 하나를 발견하면 그것은 약수를 2개씩 발견하는 것과 같다는 말이다.
따라서, 보통 약수의 개수는 짝수가 된다고 생각할 수 있다.
그런데 홀수가 된다?
이 말은 즉 몫 = 약수 이어야 한다는 의미 이므로 x = y2으로 표현이 된다.
이때, y가 정수이므로, x의 제곱근은 정수이다.
function solution(left, right) { let answer = 0 for (let i = left ; i <= right ; i ++) { if(Number.isInteger(Math.sqrt(i))) { answer -= i continue ; } answer += i } return answer }
* Number.isInteger(value) : 주어진 값(value)의 정수 여부를 나타내는 Boolean을 return한다.
'Algorithm | Data structure > 문제풀이' 카테고리의 다른 글
[프로그래머스] JavaScript 진수 변환 (0) 2023.04.05 [프로그래머스] 폰켓몬 (0) 2023.01.17 [객체, 배열] 배열 내 반복 요소 개수 찾기 (0) 2022.11.08 [객체, 배열] 로마자에서 숫자로 바꾸기(수열) (0) 2022.11.08 숫자 뒤집기 (0) 2022.11.01