티스토리 뷰
문제 설명
정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
제한 사항
n은 0 이상 3000이하인 정수입니다.
문제 풀이
더보기



진짜다.
문제를 풀기 위해 생각한 로직은
n의 약수 : 나눴을 때 나머지가 0인 수
for 문을 써서 1~n까지 다 나눠서 나머지가 0인 수만 걸러내면 되겠다.
걸러낸 수를 다 더하면 되겠다.
였다. for문을 이용하여 짠 첫번째 코드.
function solution(n) {
const sum = 0
for(let i = 0; i<=n; i++){
if (n%i = 0){
return i
} sum +=i
}
return sum
}
결과는 실패. 어떤 문제점이 있는지 모르겠어서 gpt한테 물어봤다.

1. 할당 연산자를 틀렸다! '===' 를 습관적으로 '='로 입력했다. 이런 초보적인 실수를! 난 초보지만.
2. const는 상수인데, for문을 통해서 sum의 값을 변경하려고 하니 안됐던 것 같다. sum값이 변하는 건 재할당이구나. 생각지 못한 부분이어서 const를 재할당 가능한 var로 변경했다.
3. return이 있으면 그 즉시 함수가 종료된다고 한다. 이건 또 처음듣는 얘기라 확인했다.


그래서 연산자를 고치고, var로 고치고,return i를 없애고 함수를 다시 돌려보았다. sum +=i도 반복되어야 하니까 for문 안에 넣었다. 두번째 코드.
정답 코드
function solution(n) {
var sum = 0
for(let i = 0; i<=n; i++){
if (n%i === 0){
sum +=i}
}
return sum
}
잘 작동한다.
'스파르타 > 알고리즘 코드카타' 카테고리의 다른 글
코딩 테스트 - 자연수 뒤집어 배열로 만들기 (0) | 2024.08.14 |
---|---|
코딩 테스트 - 나머지가 1이 되는 수 찾기 (0) | 2024.08.12 |
코딩 테스트 - 자릿수 더하기 (0) | 2024.08.09 |
코딩 테스트 - 평균 구하기 (0) | 2024.08.08 |
코딩 테스트 - 가운데 글자 가져오기 (0) | 2024.08.02 |