프로그래머스 코딩테스트 연습

[프로그래머스 코테 C#] Lv1. 자릿수 더하기

노재두내 2024. 3. 14. 14:06

문제

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

 

보자마자 100,10 이런거 나누는게 생각났다.

근데 N의 범위가 억까지 가능해서 

어떻게 해야하나 고민 해봐야할거같음

몫을 더하는거

 

아 계속 10으로만 나누면 될거같은디 = 아 아니다 그러면 123을 10으로 나누면 몫이 12가 나옴 

 

 

무조건 큰 값부터 나누고 그 나머지를 나눠야 몫이 제대로 나옴 

 

 

일단은 큰 단위의 값은 생각하지 말고 주어진 입력값만 통과되도록 만들어보자

using System;

public class Solution {
    public int solution(int n) {
        int answer = 0;
        int mok;
        int i=100;
        int remain=n;
        while(i>0)
        {
            mok=remain/i;
            remain=remain%i;
            answer+=mok;
            i=i/10;
        }
        
        return answer;
    }
}

예상한대로 100의 단위까지는 통과

 

i 만 100000000으로 변경하니

using System;

public class Solution {
    public int solution(int n) {
        int answer = 0;
        int mok;
        int i=100000000;//여기만 변경
        int remain=n;
        while(i>0)
        {
            mok=remain/i;
            remain=remain%i;
            answer+=mok;
            i=i/10;
        }
        
        return answer;
    }
}

정답

 

하지만 저렇게 i에다가 값을 할당하는게 맞는 방법이 아닌거같은 하드코딩 느낌 다른 사람의 풀이를 보자


[다른사람 풀이]

using System;

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

        while(n>0){
            answer+=n%10;
            n=n/10;
        }
        return answer;
    }
}

와웅 나머지 연산을 먼저하고

123이라고 치면 

나머지는 3이고

n은 12가 되고 

다시 나머지는 2

n은 1

다시 나머지는 1

그래서 1+2+3

 

대박이군..

 

자연수 n을 문자열로 바꾼 후에 계산 

using System;

public class Solution {
    public int solution(int n) {
        int answer = 0;
        string leng="";
        for(int i = 0; i<n.ToString().Length; i++){
            leng = n.ToString().Substring(i,1);
             answer=answer+int.Parse(leng);
        }

        return answer;
    }
}