-
#AIL_23.11.16 // Programmers_약수의 합AIL( Algorithm I Learned) 2023. 11. 16. 10:14
## AIL_약수의 합
*** 문제 설명
정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
*** 제한 사항
n은 0 이상 3000이하인 정수입니다.
*** 입출력 예
n return 12 28 5 6
*** 입출력 예 설명
입출력 예 #1 // 12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.
입출력 예 #2 // 5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.
## solution.JavaScript
1. 문제의 접근 방식
주어진 문제는 양의 정수 `n`을 입력 받아서, 그 수의 약수들을 모두 찾고 그 약수들을 모두 더한 값을 반환하는 함수를 작성하는 것입니다. 약수란 주어진 수를 나누어 떨어지게 하는 수를 말합니다.
2. 문제풀이
function solution(n) { var answer = 0; for(let i = 1; i<=n; i++) { if(n % i === 0) { answer += i } } return answer; } /* 테스트 1 입력값 〉 12 기댓값 〉 28 실행 결과 〉 테스트를 통과하였습니다. 테스트 2 입력값 〉 5 기댓값 〉 6 실행 결과 〉 테스트를 통과하였습니다.
1. `solution` 함수는 변수 `answer`를 0으로 초기화 합니다. 이 변수는 약수들을 더한 값을 저장할 곳입니다.
2. `for` 루프를 통해 `i` 변수를 1부터 n까지 증가시킵니다. 이때, `i` 는 n의 약수 후보입니다.
3. `if` 문을 사용하여 현재의 `i`가 n의 약수인지 확인합니다. `n % i == 0`은 n을 i로 나눈 나머지가 0인지 확인하는 조건입니다. 나머지가 0이라면 `i`는 n의 약수입니다.
4. 만약 `i`가 n의 약수라면, `answer`에 `i` 값을 더합니다. 이를 통해 현재 찾은 약수를 `answer`에 추가합니다.
5. `for` 루프가 끝나면, `answer`에는 n의 모든 약수를 더한 값이 저장됩니다.
3. 다른사람의 문제풀이 및 접근방식 분석
function solution(n) { var answer = 0; let i; for (i = 1; i <= Math.sqrt(n); i++){ if (!(n%i)) { answer += (i+n/i); } } i--; return (i === n/i) ? answer-i : answer; } /* 테스트 1 입력값 〉 12 기댓값 〉 28 실행 결과 〉 테스트를 통과하였습니다. 테스트 2 입력값 〉 5 기댓값 〉 6 실행 결과 〉 테스트를 통과하였습니다. */
1. `i` 변수를 선언하고, 1부터 `n`의 제곱근까지 (`Math.sqrt(n)`)을 반복하는 `for` 루프를 설정합니다.
2. `i` 변수를 선언하고, 1부터 `n`의 제곱근까지 ('Math.sqrt(n)')이 반복하는 `for` 루프를 설정합니다.
3. 반복문 내에서, `if` 조건문으로 현재의 `i`가 `n`의 약수인지 확인합니다. `n % i` === 0`는 `n`을 i로 나눴을 때 나머지가 0인지 확인하는 조건입니다. 이 조건을 만족하면 `i`는 `n`의 약수입니다.
4. 약수인 경우, `answer`에 `i`와 `n/i` 값을 더합니다. `n/i` 는 `i`의 짝을 이루는 다른 약수입니다. 따라서 두 약수를 한번에 더합니다.
5. 'for' 루프가 끝나면 `i`를 1 감소시키고, 만약 `i`와 `n/1`가 같다면 중복으로 더해진 것이므로 `answer -i`를 반환합니다. 중복으로 더해진 경우를 제외하고 최종 결과값을 반환합니다.
이 함수는 입력된 수의 제곱근까지만 반복하여 약수를 찾기 때문에 효율적입니다. 약수를 중복해서 더하는 경우를 방지하고, 더 적은 반복을 통해 약수를 찾아 전체 약수의 합을 계산할 수 있습니다.
# Math.sqrt()란?
Math.sqrt() 함수는 숫자의 제곱근을 반환합니다. 양의 정수 또는 실수의 제곱근을 구하는데 사용됩니다.
Math.sqrt(x);
여기서 `x`는 양의 정수 또는 실수입니다. `x`의 제곱근을 계산하고 이 값을 반환합니다.
주어진 숫자에 루트( √ )를 씌어줍니다. 만약 숫자가 음수이면 NaN를 반환합니다.
예를들어
Math.sqrt(9); // 3 Math.sqrt(2); // 1.414213562373095 Math.sqrt(1); // 1 Math.sqrt(0); // 0 Math.sqrt(-1); // NaN
이 메소드를 사용하여 주어진 수의 제곱근을 쉽게 계산할 수 있습니다.
'AIL( Algorithm I Learned)' 카테고리의 다른 글
#AIL_23.11.18 // Programmers_자릿수 더하기 (0) 2023.11.18 #AIL_23.11.17 // Programmers_나머지가 1이 되는 수 찾기 (0) 2023.11.17 #AIL_23.11.15 // Programmers_서울에서 김서방 찾기 (0) 2023.11.15 #AIL_23.11.14 // Programmers_정수 내림차순으로 배치하기 (1) 2023.11.14 #AIL_23.11.13 // Programmers_문자열 정수로 바꾸기 (1) 2023.11.13