class Solution {
public static void main(String[] args) {
int n = 5;
Solution solution = new Solution();
int result = solution.solution(n);
System.out.println(result);
}
public int solution(int n) {
int answer = 0;
for(int i = 1; i <= n; i++){
if( n % i == 0){
answer++; //true일 경우 i의 숫자를 다 더해준다
}
}
return answer;
}
}
해당 문제가 원하는 것은 n의 약수를 모두 더한 값을 리턴하는 함수를 완성해달라는 것이였다.
위의 코드로 돌리게 되면 return = 2가 나왔는데, 내가 원하는 값은 return = 6 이였다. 아마도 위의 코드는 약수가 모두 몇개인지를 물어보는 것 같았다.
for(int i = 1; i <= n; i++){
if( n % i == 0){
answer++; //true일 경우 i의 숫자를 다 더해준다
}
위 코드에서 answer 부분에 문제가 있는 것은 느꼈지만, 어떻게 바꿔줘야하는지 감이 오지 않았다. 내가 원하는 것은 for문과 if문을 돌리고 true일 경우 i를 더 해주는 것이였는데 자꾸 몇개인지를 찾아내는것 같았고 debugging을 해보니 내가 생각한대로였다.
결과적으로 answer = answer + i로 변경하여 해당 문제를 풀 수 있었다.
구글링을 해서 찾아보니 answer++는 for문과 if문에 true인 i 값이 몇개인지를 보여주는 것이였고 내가 원하는 것은 answer = answer + i 이였다. 해답을 찾으면 정말 쉽고 단순하지만, 아직 알고리즘을 100% 이해하지 못하고 있는 상황에서는 헷갈리고 헤매고 있는것 같다.
다시 한번 말해 너무 쉬운 문제였고, 충분히 할 수 있던 문제였지만 아직은 알고리즘과 안에 사용되는 Java의 요소들을 잘 이해하지 못하고 있다는 생각이 들었다. 문제를 하나하나 풀때마다 새로운걸 배우고 조금씩 성장해가는 느낌이 난다. 불과 3일전만해도 문제를 스스로의 힘으로 시작도 못했는데, 이제는 제법 시작과 틀은 잡고 있는것 같다.
그리고 오늘은 "answer = answer + i"를 간추려서 "answer += i"로 사용 할 수 있다는 것도 알게 되었다. "+="는 영어로는 Addition assignment operator라고 하며, 쉽게 설명하면 x += y는 x = x + y 와도 같다는 것이다. In another words, "+=" is a shorthand way to add a value to a variable.
추가적으로 "+="와 같이 Common Java Operators들을 익히기 위에 아래 표를 만들어 보았다.
화이팅하자. 그게 답이다.