[프로그래머스 Lv.1] - 자리수 더하기

김주형·2022년 9월 29일
0

알고리즘

목록 보기
8/29

출처


문제 설명

자리수 더하기

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

제한사항

  • N의 범위 : 100,000,000 이하의 자연수

입출력 예

Nanswer
1236
98724

입출력 예 설명

입출력 예 #1
문제의 예시와 같습니다.
입출력 예 #2
9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.


1. 나눗셈을 이용한 방법

10으로 나눈 나머지를 더해주고,
n 을 10으로 나누면서 한자리식 소거하며 더하는 방법을 통해 간단히 해결할 수 있다.

public class Solution {
    public int solution(int n) {
        int answer = 0;
        
        while(n>0){
            answer += n%10;
            n /= 10;
        }
        
        return answer;
        
    }
}
  1. 입력받은 수를 10으로 나누는 것을 반복한다.
  2. 10으로 나눌 때마다 생기는 나머지를 각각 더한다.
  3. 이것을 더 이상 나누지 못할 때까지 반복한다.

2. 형변환과 분할을 이용한 방법

문자열로 형변환한뒤 스플릿을 사용하면 각각 나누어서 더할 수 있지 않을까라고 가장 먼저 떠올렸던 방법이다.
하지만 코드로 표현했을 때 나눗셈을 이용한 것보다 복잡한 절차가 필요함을 깨닫고 수학을 잘하시는 분들의 풀이를 보며 하나씩 배웠다.

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

        String[] string = String.valueOf(n).split("");

        for (int i = 0; i < string.length; i++) {
            answer += Integer.parseInt(string[i]);
        }

        return answer;
    }
}
  1. n을 문자열로 변환하고 각 자리별로 스플릿하여 배열에 담는다.
  2. 0부터 배열 최대크기까지 각 원소들의 덧셈을 반복한다.
  3. 반복함과 동시에 각 원소들을 정수형으로 다시 형변환해준다.

차이점

나눗셈 풀이 결과

mathResult

형변환 풀이 결과

stringResult

두 방식의 메모리 사용의 유의미한 차이는 모르겠으나
실행 속도면에선 5~6배 이상 차이가 나는 것 같다.

두번 형변환 하는 방법보다 나눗셈을 통해 간결히 해결한 사람들을 보며 위화감을 느꼈다. 역시 수학은 위대한 것 같다..

지금이라도 다시 수학을 배워야 할 것 같은 느낌

profile
근면성실

0개의 댓글