문제

어떤 수를 입력받아 그 수의 약수를 모두 더한 수 sumDivisor 함수를 완성해 보세요. 예를 들어 12가 입력된다면 12의 약수는 [1, 2, 3, 4, 6, 12]가 되고, 총 합은 28이 되므로 28을 반환해 주면 됩니다.

풀이 1

class SumDivisor {
	public int sumDivisor(int num) {
		int answer = num;

    for(int i=1; i<=num/2; ++i)
      if(num%i == 0) answer += i;
    
		return answer;
	}

	// 아래는 테스트로 출력해 보기 위한 코드Q입니다.
	public static void main(String[] args) {
		SumDivisor c = new SumDivisor();
		System.out.println(c.sumDivisor(12));
	}
}

일단 어떤 수의 절반값은 그 수의 약수이다. 그래서 절반값을 for문의 탐색범위로 잡으면 전체 수로 잡는것보다 성능상 조금의 이득(?)이 있다. 수학적인 생각을 조금 하면 무난하게 풀 수 있는 문제이다. 다른 사람들도 거의 이렇게 풀어서 딱히 다른 풀이는 없는 듯 하다.