새소식

Programmers Coding Test/Java

[프로그래머스 120906] Java - 코딩테스트 입문 / 자릿수 더하기

  • -

 

 

자릿수 더하기

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120906

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

1)  문제

정수 n이 매개변수로 주어질 때 n의 각 자리 숫자의 합을 return하도록 solution 함수를 완성해주세요
제한사항
0 ≤ n ≤ 1,000,000

 

 

2)  예시

 

 

Result Table
n result
1234 10
930211 16

 

 

 

입출력 예 #1
1 + 2 + 3 + 4 = 10을 return합니다.


입출력 예 #2
9 + 3 + 0 + 2 + 1 + 1 = 16을 return합니다.

 

 

 

 

 

 

3)  풀이

 

 

1. 클래스 선언을 해줍니다

● class Solution {

클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.

 

 

 

 

2. 정수 n을 매개변수로 하는 solution 메소드를 선언합니다.

solution은 정수를 반환하므로 데이터타입을 int로 합니다.

●   public int solution(int n) {

 

 

 

 

3. 제한사항을 확인하고, 만족하지 않을 경우 예외처리합니다.

●    if(0> n || n > 1_000_000){
            throw new IllegalArgumentException("n은 0 이상 1000000 이하입니다.");
        }
        

 

 

 

4. 정답이 될 변수 answer를 생성하고 초기화해줍니다.

int n 값을 문자열로 number로 형변환해줍니다.

(char로 문자 하나하나 분할하고, 분할된 값에 해당하는 수를 더하기위함입니다.)

 

for반복문을 이용하여 number 문자열을 문자 하나하나 분할하고, getNumericValue 메소드를 이용하여 정수로 형변환하여 반환하면서 그 값을 answer에 더 해줍니다.

즉, 각 자리 수를 더해준다는 뜻입니다.

      int answer = 0;
        String number = Integer.toString(n);
        
        for(int i=0; i < number.length(); i++){
            char c = number.charAt(i);
            answer += Character.getNumericValue(c);
        }
        return answer;
    }
}


 

 

 

 

 

 

4)  코드

 

class Solution {
    public int solution(int n) {
        if(0> n || n > 1_000_000){
            throw new IllegalArgumentException("n은 0 이상 1000000 이하입니다.");
        }
        
        int answer = 0;
        String number = Integer.toString(n);
        
        for(int i=0; i < number.length(); i++){
            char c = number.charAt(i);
            answer += Character.getNumericValue(c);
        }
        return answer;
    }
}

 

 

 

 

 

 

 

5)  느낀점

문제를 보자마자 String으로 변환하여 각 자리수를 getNumericValue를 이용해서 더해주면 되겠구나 생각했습니다.

하지만 int n을 문자열로 형변환하는 과정에 문제가 발생했습니다.

제가 제일 처음 작성한 코드는 
        String number = n.toString(); 이었습니다.

아쉽게도 int는 toString이라는 메소드가 없었습니다. 따라서 Integer 클래스의 toString 메소드를 사용해야했습니다.

그래서 수정한 것이

        String number = Integer.toString(n); 로 정답에 도달할 수 있었습니다.

 

 

그리고 getNumericValue 외에도 10으로 나누는 식으로 진행해도 되겠다 라는 생각을 했는데,

다른 사람들의 코드를 보니 그렇게 진행하였습니다. 아래는 참고용입니다.

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

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

        return answer;
    }
}

 

while 반복문으로 n이 0 초과일 때 계속 반복하게하고,

10으로 나눈 나머지값을 answr에 더하고, 10으로 나눈 몫을 다시 n으로 바꾸고...

이렇게하면 일의 자리수부터 가장 큰 자리수까지 더해주는 방식으로 진행되게 됩니다.

 

결론적으로보니, 10으로 나누면서 반복하는 코드가 제 코드보다 훨씬 좋았습니다.

가독성뿐만 아니라, 제 코드의 경우 문자열로 형변환하고 저장하고, 문자열 길이만큼 반복문을 시행해야하는 등 메모리 사용도 더 많기 때문입니다.

비슷한 문제를 맞이한다면 10으로 나누는 방식으로 진행해야겠습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.