프로그래머스 스쿨에서 Java 입문 강의의 마지막 실습으로 나온 문제이다.
다음은 내 코드이다.
class Solution {
public int solution(int n) {
int answer = 0;
int lesser = 1;
int more = 0;
do {
more = n / lesser;
if (n % lesser == 0) {
answer += lesser;
if (lesser != more) {
answer += more;
}
}
lesser++;
} while (lesser < more);
return answer;
}
}
대다수의 풀이는 다음과 같다.
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;
}
}
그런데 위의 내 코드는 정답으로 통과하지 못했다.
뭐가 문제인지 한참 찾아봤는데... 다른 velog 글에 그 이유가 적혀 있었다.
https://velog.io/@benomadwill/dailyalgo7
문제에 0 이상 3000 이하인 자연수라 적혀 있었기에.. 0도 처리를 해줘야 하는 것이었다.
그런데 0이 자연수인지..? 이건 솔직히 수학자가 아니라서 잘 모르겠지만, 확실한건 0의 약수는 없다는 것이다.
따라서 차라리 0을 넣으면 예외처리를 하도록 문제를 만들었으면 모를까... 0의 약수의 합이 0이라고 리턴을 하게 만들고 그거를 테스트케이스로 넣는거는 좀... 납득이 가지 않는다.