문제해결
function solution(n) {
let answer = 0;
let answerArray = [];
for (let i = 1; i <= n ; i++){
if(n%i === 0){
answerArray.push(i);
}
}
answer = answerArray.reduce((a,b)=>a+b);
return answer;
}
// 약수는 나눠지는 모든숫자. (기억 잘 안남 틀리면 고쳐주세여ㅠ)
// 따라서 자기자신까지 for문을 돌려서 나눠서 나머지가 0이 되는 숫자들을 구함.
// 배열안에 나머지가 0이 되는 숫자들을 push하고
// reduce를 이용해 더해준뒤 answer로 리턴해줌.
테스트 1 〉 통과 (0.05ms, 30.1MB)
테스트 2 〉 통과 (0.06ms, 29.9MB)
테스트 3 〉 통과 (0.09ms, 30.1MB)
테스트 4 〉 통과 (0.07ms, 30.1MB)
테스트 5 〉 통과 (0.10ms, 29.8MB)
테스트 6 〉 통과 (0.09ms, 29.6MB)
테스트 7 〉 통과 (0.12ms, 29.9MB)
테스트 8 〉 통과 (0.09ms, 30.1MB)
테스트 9 〉 통과 (0.14ms, 29.9MB)
테스트 10 〉 통과 (0.13ms, 29.9MB)
테스트 11 〉 통과 (0.10ms, 29.9MB)
테스트 12 〉 통과 (0.12ms, 30MB)
테스트 13 〉 통과 (0.07ms, 30.2MB)
테스트 14 〉 통과 (0.17ms, 29.7MB)
테스트 15 〉 통과 (0.18ms, 29.9MB)
테스트 16 〉 실패 (런타임 에러)
테스트 17 〉 통과 (0.19ms, 30MB)
// 런타임에러가 떴당!!
// for문을 줄여야 할까 고민하다가 모르겠어서 검색했는데
// 이렇게 바로 더하면 되는것이어따...!!
function solution(n) {
let answer = 0;
for (let i = 0; i<=n ; i++){
if(n%i === 0){
answer += i;
}
}
return answer;
}
개선점
function solution(n) {
let answer = 0;
const answerArray = [];
for (let i = 1; i <= n ; i++){
if(n%i === 0){
answerArray.push(i);
}
}
answer = answerArray.reduce((a,b)=>a+b,0);
return answer;
}
reduce에 초기값을 줘야한다!
초기값 0을 주니까 런타임 에러가 발생하지 않았다.
for와 reduce를 두개를 써서 쓴 에러가 아니었단 말..!!
코딩보다 알고리즘이 더 재밌어-!푸핫
reduce 정리한거 여기
'알고리즘 > 문제를 풀어보쟈' 카테고리의 다른 글
둠스데이 난 몰랐어 (0) | 2022.04.16 |
---|---|
서울에서 김씨 찾기... (0) | 2022.03.25 |
이상한문자를 만들어보자 (0) | 2022.03.17 |
배열을 비교해 중복제거하기 (0) | 2022.03.15 |
자연수를 뒤집어 배열로 만들어보자 (0) | 2022.03.13 |