[프로그래머스] 약수의 합-JAVA

말하는 감자·2022년 5월 11일
0

Programmers Level 1

목록 보기
16/66
post-thumbnail

프로그래머스 Level 1

🔒 약수의 합

📚 문제 설명

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.


✅ 제한 사항

  • n은 0 이상 3000이하인 정수입니다.

📖 입출력 예

sreturn
1228
56

📃 입출력 예 설명

입출력 예 #1
12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.

입출력 예 #2
5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.


🗝️ 작성 코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        for(int i=1; i<=n; i++) {
            if(n % i == 0) answer += i;
        }
        
        return answer;
    }
}

뭔가 맘에 들진 않지만 간단하게 해결은 했다.

for문으로 i를 1부터 n만큼 돌리면서 n을 i로 나눴을 때 나머지가 0이라면 약수이므로 answer에 더했다.

처음에 i를 0으로 했다가 java.lang.ArithmeticException 뜬 건 안비밀...ㅎ
정수로 0으로 나누려고 할 때 뜨는 에러이다.


🔓 다른 사람의 코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        for(int i=1; i<=n/2; i++) {
            if(n % i == 0) answer += i;
        }
        
        return answer + n;
    }
}

다른 사람의 풀이에서 발견한 코드를 가져오고 싶었는데 문제가 개편되면서 함수 구성이 달라졌기에 감자의 코드에 다른 부분만 삽입하였다.

다른 부분이 무엇이냐고요?

i를 n/2만큼만 돌리고 return시에 answer+n을 반환하는 것이다.

n / 1 = n 이고 n / 2 = n/2인데 1과 2사이에 더이상 정수가 없다.

그러니 원래의 수에서 나누기 2한 값보다 작은 약수는 원래의 수 말고는 없기 때문에 for문 루프를 반으로 줄이는 방법이다!!

이런 똑똑한 사람들!!


💪 느낀 점

단순히 문제를 푸는 것에 그치지 말고 효율적으로 해결하고 싶다!!

그러려면 수학을 잘해야돼ㅠㅠ
수학 공부를 해야겠다!!

profile
나는 말하는 감자다

0개의 댓글