2024 - 09 - 20

e_zy·2024년 9월 20일

추석 끝나고 오랜만에 쓰는 TIL이다. 오랜만에 알고리즘을 풀고 평소 궁금해하던 부분의 문제가 나와서 적어보려고 한다.

오늘은 자연수 N이 주어졌을 때, 각 자릿수의 합을 구하는 문제를 해결했다. 예를 들어, N = 123이면 각 자릿수를 더한 1 + 2 + 3 = 6을 반환하는 것이 목표였다.

문제의 핵심
이 문제에서 중요한 점은 N의 각 자릿수를 쉽게 분리하는 방법이다. 제한사항에서 N의 범위가 100,000,000 이하의 자연수로 주어졌으므로, 매우 큰 자연수도 처리할 수 있는 알고리즘을 고민해야 했다.

해결 전략
문제를 해결하기 위한 두 가지 방법이 떠올랐다.

숫자를 문자열로 변환하는 방법: 숫자를 문자열로 바꾼 후, 각 문자를 다시 숫자로 변환해 더하는 방법이다. 이 방법은 직관적이며, 자릿수를 바로 접근할 수 있는 장점이 있다.

정수 연산을 사용하는 방법: 숫자를 10으로 나누어 나머지를 구하는 방식으로 각 자릿수를 추출하는 방법이다. 이 방법은 변환 과정을 거치지 않기 때문에 조금 더 효율적일 수 있다.

최종 코드
나는 이번 문제에서 정수 연산을 사용하는 방법으로 문제를 해결했다. 코드는 다음과 같다.

public class Solution {
    public int solution(int n) {
        int sum = 0;
        
        while (n > 0) {
            sum += n % 10;  // 마지막 자릿수를 더함
            n /= 10;        // 마지막 자릿수를 제거
        }
        
        return sum;
    }
}

배운 점
자릿수를 다룰 때, 숫자를 문자열로 변환하여 처리할 수도 있고, 수학적인 방식으로 처리할 수도 있다.
효율성 측면에서는 변환 과정을 생략하는 것이 유리할 수 있으며, 이번 문제에서는 정수 연산 방식이 더 적합했다.
자릿수 관련 문제는 자주 등장하기 때문에, 두 가지 방법 모두 익숙해져야겠다.
이번 문제를 통해 숫자를 다루는 다양한 방식을 생각해볼 수 있었다. 다음에는 더 큰 범위의 숫자나 다른 조건들이 추가된 문제도 해결해보고 싶다.

profile
코딩 왕초보

0개의 댓글