코딩테스트 스터디

코딩테스트 연습 - 자릿수 더하기 (JAVA)

개발짱 지망생 2023. 2. 7. 07:00

프로그래머스 코딩테스트 입문 0단계 문제입니다

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

 

📢 문제 설명

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

 

⭕ 정답 코드

1) 반복문

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

🔍 해설

❗핵심

n을 계속 10으로 나누면서

     그 나머지로 나오는 일의 자리를 구하고, (% 연산자)

     계산한 일의 자리는 계속 없애주는 것이다 (/ 연산자)

 

① n이 0보다 클때만 반복되는 반복문 안에서

n을 10으로 나눈 나머지(일의 자리)를 answer에 더해준다

③ 이제는 계산될 필요가 없는 일의 자리를 날려주기 위해 n을 10으로 나눠준다

④ n의 제일 왼쪽에 있던 숫자까지 계산이 되면 n은 0이 되므로 반복문이 멈춘다

 

 

2) Stream의 sum()

class Solution {
    public int solution(int n) {
        return Arrays.stream(
                String.valueOf(n) //String의 값이 된 n을
                        .split("") //하나하나씩 나누어서 Stream을 만든다
            )
                .mapToInt(Integer::parseInt)//Stream의 데이터들을 다시 int로 바꾸고
                .sum(); //모두 더해준다
    }
}

🔍 해설

주석에 더 자세하게 설명해놓았습니다

 

① n을 String의 값으로 만들어 split으로 Stream을 생성해준다

mapToInt()로 String의 값인 Stream을 int형으로 바꾸어준다

③ sum()으로 Stream의 데이터들을 모두 더해 반환해준다

 

📒 기억하고 갈 문법

mapToInt(i -> i)로 안 되는 데이터들은

mapToInt(Integer::parseInt)로 int 형변환해주자

 

 

✅ 반성할 점 & 회고

반복문을 사용하여 문제 풀이를 할때 처음에는

class Solution {
    public int solution(int n) {
        int answer = 0;
        while(n/10 > 0){ //여기
            answer += n%10;
            n/=10;
        }
        answer += n%10; //여기
        return answer;
    }
}

조건을 (n/10 > 0) 으로 주어서

코드를 한줄 더 늘렸었다