• 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
    예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

[제한사항]

  • N의 범위 : 100,000,000 이하의 자연수

[입출력 예]

 

 

 


추측) 

숫자를 문자열로 만들어 각각 잘라 배열을 만든다! 이를 for문으로 하나씩 꺼내 숫자화 시키고 변수하나에 합산시키면 될 듯하다.

 

 

소스코드) 

public class Solution {
    public int solution(int n) {
        int answer = 0;

        String a = Integer.toString(n);
        String[] s_arr = a.split("");

        for(int i=0; i<s_arr.length; i++){
            answer += Integer.parseInt(s_arr[i]);
        }

        return answer;
    }
}

 

리뷰) 

추측한 대로 결과를 도출하는데 성공했다. 다른 풀이도 보면 형변환없이 10으로 나누어 일의 자리수, 십의 자리수 등 순서대로 뽑아내 각각 더하는 방식도 있었고 심지어 숫자를 문자열화하고 배열로 변환해 아스키코드를 이용한 방법도 있었다. 

 

 

 

+ 아스키 코드로 푸는 방식이 너무 신기해서 추가

mport java.util.*;

public class Solution {
    public int solution(int n) {
        int answer = 0;

        char[] arr = Integer.toString(n).toCharArray();

        for(int i = 0; i < arr.length; i++){
            answer += arr[i] - 48;
        }

        return answer;
    }
}

여기서 for문 안에 있는 arr[i]를 풀면 9,8,7 들이 출력되는데 이상태로 더하면 24가 아니라 168이 나온다.

왜냐면 출력되는 9,8,7은 숫자가 아니라 char 타입의 문자이기 때문! 따라서  char타입은 int와 연산을 하면 int로 바뀜

각각 9 문자는 57, 8은 56, 7은 55의 int값이 되며 여기서 숫자 9,8,7이 되게 하기 위해서 -48의 값을 연산하게 된 것이다.

알고리즘을 푸는 방법이 이렇게 다양할 수 있구나 싶고 다른 사람들의 다양한 방법을 접하면서 생각을 많이 넓혀보고 싶다는 생각이 든다. 

 

+ Recent posts