코드 그라데이션

[Lv.0] 자릿수 더하기 본문

Java/알고리즘

[Lv.0] 자릿수 더하기

완벽한 장면 2023. 6. 21. 09:14

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

 

프로그래머스

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

programmers.co.kr

 

문제 설명

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

 

제한사항

입출력 예

입출력 예 설명

 

아이디어

  • int는 한자리씩 돌기가 곤란.
  • 그럼, 문자열로 바꿔서, 값을 하나씩 떼서, 그걸 다시 int로 바꿔서, 그걸 더해서 합을 출력하면 될 듯.

문자열 추출할 때,

예를 들어 1234라는 문자열이 있을 때 1, 2, 3, 4를 각각 추출하려면

1을 진짜로 뽑아서 바꾼 다음에 가져오는 것이 아니라,

just 보기만 한다(charAt() 활용)

그럼 여기서도 하나씩 잘라낼 필요 굳이 없고, 

문자열은 사실상 문자 배열이니까 한 글자씩 보면서 그 숫자들을 더하면 된다.

 

Integer.parseInt() 쓸 수없는 이유는, 이건 인자를 String만 받는다.

char을 그냥 문자열로 바꿔버리면 됨.

answer += Integer.parseInt(st.charAt(i) + ""); 이렇게

 

근데 더 간단한 방법이 있다.

char을 숫자로 바꾸는 것도 자바가 메서드를 제공한다.

Character.getNumericValue(st.charAt(i));

또는 아스키 코드 활용. (문자 0 빼기)

 

지금까지는 숫자를 문자열로 바꿔서 해결했는데,

이 작업을 하지 않고도 원하는 정수에서 한 자릿수 얻어내는 방법이 있다.

=> 나누기와 나머지 활용.

ex. 1234 가 있으면

* 1234 에서 10을 나눈 나머지는 10의 자리를 제외한 나머지가 나온다

즉, 언제나 1의 자리가 나온다는 말.

1의 자리를 얻었으니, 이제 그걸 버린다.

어떻게 버리냐면, 1234를 10으로 나눈 몫을 취함으로써

10의자리, 100의자리, 1000의 자리도 이 작업을 반복 수행하면 됨.

 

 

 

나의 코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        String st = n + "";
        for(int i= 0; i<st.length(); i++) {
            answer += st.charAt(i) - '0';
        }
        return answer;
    }
}
728x90

'Java > 알고리즘' 카테고리의 다른 글

[Lv.0] 조건 문자열  (0) 2023.06.28
[Lv.0] 수열과 구간 쿼리  (0) 2023.06.24
[Lv.0] 가장 큰 수 찾기  (0) 2023.06.20
[Lv.0] 홀짝 구분하기  (0) 2023.06.19
[Lv.0] 최댓값 구하기 (1)  (0) 2023.06.18
Comments