본문 바로가기

프로그래머스 코딩(자바)/Level 0

Programmers Level 0 - 자릿수 더하기

728x90

문제 설명

정수 n이 매개변수로 주어질 때 n의 각 자리 숫자의 합을 return하도록 solution 함수를 완성해주세요


제한사항
  • 0 ≤ n ≤ 1,000,000

 

입출력 예
n result
1234 10
930211 16

 

입출력 예 설명

 

입출력 예 #1

  • 1 + 2 + 3 + 4 = 10을 return합니다.

입출력 예 #2

  • 9 + 3 + 0 + 2 + 1 + 1 = 16을 return합니다.

[ 풀이 1 ]

1
2
3
4
5
6
7
8
9
10
class Solution {
    public int solution(int n) {
       int answer = 0;
        while(n>0) {
            answer += n%10;
            n/=10;
        }
        return answer;
    }
}
 
 

 

 n %10 할때마다 맨뒤의 1자리가 구해진다.  이 값을 누적한다.

 n /= 10 하면 맨 뒷자리가 사라진다.(정수 나누기 정수의 결과는 정수이기 때문이다.)
 
n의 값이 0보다 클때까지 반복하면 된다.

 

[ 풀이 2 ]

1
2
3
4
5
class Solution {
    public int solution(int n) {
           return Arrays.stream((n+"").split("")).mapToInt(Integer::parseInt).sum();
    }
}
 
 

 

 n+"" : String으로 변환
 
 (n+"").split("") : String을 1글자씩 분리하여 String 배열로 만든다.
 
 Arrays.stream((n
+"").split("")) : Stream<String>으로 변환
 
 Arrays.stream((n
+"").split("")).mapToInt(Integer::parseInt) : 각각의 요소를 Integer.parseInt()메서드 
 를 이용하여 Integer타입의  IntStream으로 변환
  
 Arrays.stream((n+"").split("")).mapToInt(Integer::parseInt).sum(); : sum() 메서드로 합계를 구한다.

위의 코드를 풀어쓰면 다음과 같다.

1
2
3
4
5
6
7
8
9
10
class Solution {
    public int solution(int n) {
      String t = n + "";        
        String[] strArray = t.split("");
        Stream<String> stream = Arrays.stream(strArray);
        IntStream intStream = stream.mapToInt(Integer::parseInt);
        int result = intStream.sum();
        return result;
    }
}
 
 

 

 

 

728x90