알고리즘

프로그래밍 문제 22번 자릿수 더하기

DoosanBaek 2022. 9. 28. 10:33

언어 : Java

문제번호: 22번

문제 설명

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

제한사항
  • N의 범위 : 100,000,000 이하의 자연수
입출력 예시

N answer
123 6
987 24
입출력 예시 설명

입출력 예시 #1
문제의 예시와 같습니다.

입출력 예시 #2
9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.

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

제한사항
  • N의 범위 : 100,000,000 이하의 자연수

Solution.Java

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

        while(true) {
            a = n%10;
            n = n/10;
            answer += a;

            if(n==0) break;
        }

        return answer;
    }
}

답안 도출 과정 : 

1. 정수를 받을 수 있는 인트 형 타입으로 answer 와 a 를 선언하고, 초기화 한다.

2. while 조건문을 활용, true 일경우에 a 는 n을 10으로 나눈 나머지가 되도록 한다. 

n을 10으로 나누는것은 예를 들어 문제의 입출력값 예시대로 123 의 각자리 숫자를 구할때

123 을 10으로 나눈 나머지 -> 3이 세번째 자리 숫자가 된다.

 12 를 10으로 나눈 나머지 -> 2가 두번째 자리 숫자가 된다.

1을 10으로 나눈 나머지 -> 1이 첫번째 자리 숫자가 된다. 

즉, 각 자리수를 구하기 위해서는 숫자의 길이를 하나씩 줄여가면서 10으로 나눈 나머지를 구하는 로직이 필요하다.

숫자의 길이를 하나씩 줄여가려면 n을 10으로 나눠 준 몫을 생각하면 된다. 

N= 123일 경우 10으로 나눠준 몫 12가 123에서 12로 숫자의 길이를 줄인 상태가 된다.

123 에서 12로 숫자 길이를 줄였다면 10으로 나눈 나머지로 두번째 자릿수를 구할 수 있다.

 

3. 때문에 n을 10으로 나눈 몫이 n에 들어가도록 하고 

 n = n/10;

3. n을 10으로 나눈 나머지가 a에 들어가도록 해서 

a = n%10;

4. answer에 a의 값을 계속해서 더해간다. ( while 문을 빠저나오기 전까지)

 answer += a;

 

5. if 조건문을 활용해서 n 이 0이 되는 순간 break 를 통해 빠저 나가도록 한다.

if(n==0) break;

6. answer로 값을 리턴한다.

 

실행메소드 추가

public class Solution22 {
    public int solution22(int n) {
        int answer = 0;
        int a = 0;

        while(true) {
            a = n%10;
            n = n/10;
            answer += a;

            if(n==0) break;
        }
        return answer;
    }
    
    public static void main(String[] args) {
        Solution22 solution22 = new Solution22();
        int n = 123;
        System.out.println(solution22.solution22(n));
    }
}