[프로그래머스] 자릿수 더하기

2024. 10. 13. 12:53·여러가지/알고리즘 & 자료구조

문제 설명
자연수 N이 주어졌을 때, N의 각 자릿수의 합을 구하는 문제입니다. 예를 들어 N = 123이라면, 1 + 2 + 3 = 6을 반환해야 합니다.


제한 사항

  • N의 범위는 100,000,000 이하의 자연수입니다.

입출력 예

N answer
123 6
987 24

문제 풀이

이 문제는 주어진 자연수 N의 각 자릿수를 구해서 더하는 작업이 필요합니다. 이를 해결하는 방법은 두 가지로 나눌 수 있습니다:

  1. 수학적 접근: 숫자를 10으로 나눈 나머지를 구해 각 자릿수를 추출한 뒤, 이를 반복해서 더하는 방식.
  2. 문자열 접근: 숫자를 문자열로 변환한 뒤 각 자릿수를 순회하며 더하는 방식.

1. Java 코드 풀이

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

        while (n != 0) {
            sum += n % 10;  // n의 마지막 자릿수를 더함
            n /= 10;        // n을 10으로 나누어 자릿수를 줄임
        }

        return sum;
    }

    public static void main(String[] args) {
        Solution sol = new Solution();
        System.out.println(sol.solution(123));  // 출력: 6
        System.out.println(sol.solution(987));  // 출력: 24
    }
}

코드 설명

  • n % 10 연산을 통해 n의 마지막 자릿수를 추출하여 sum에 더합니다.
  • n /= 10을 통해 n을 10으로 나누어 자릿수를 하나씩 줄여 나갑니다.
  • n이 0이 될 때까지 이 과정을 반복하여 모든 자릿수를 더합니다.

2. Python 코드 풀이

def solution(n):
    return sum(int(digit) for digit in str(n))

# 테스트 예시
print(solution(123))  # 출력: 6
print(solution(987))  # 출력: 24

코드 설명

  • 숫자 n을 문자열로 변환한 후, 각 자릿수를 순회하며 int로 변환하여 더합니다.
  • sum() 함수와 리스트 컴프리헨션을 이용해 간결하게 구현할 수 있습니다.

3. 시간 복잡도 분석

두 코드 모두 주어진 숫자의 자릿수만큼의 연산을 수행합니다.

  • 숫자의 자릿수가 d라고 했을 때, 각 자릿수를 추출하여 더하는 과정은 O(d)의 시간 복잡도를 가집니다.
  • 따라서 주어진 숫자가 최대 100,000,000일 때, 시간 복잡도는 O(d), 즉 O(log N)가 됩니다. 이는 N의 자릿수에 비례하는 복잡도입니다.

4. 공간 복잡도 분석

  • Java와 Python 모두 sum 변수 하나만을 사용하거나, 리스트 컴프리헨션을 통해 자릿수를 순회할 때마다 상수 크기의 메모리만 필요로 하므로, 공간 복잡도는 O(1)입니다.

5. 다른 자바 코드 풀이 방법

방법 1: 문자열을 활용한 풀이

class Solution {
    public int solution(int n) {
        String numStr = Integer.toString(n);
        int sum = 0;

        for (char c : numStr.toCharArray()) {
            sum += c - '0';  // 각 문자를 숫자로 변환해 더함
        }

        return sum;
    }

    public static void main(String[] args) {
        Solution sol = new Solution();
        System.out.println(sol.solution(123));  // 출력: 6
        System.out.println(sol.solution(987));  // 출력: 24
    }
}

이 방법은 숫자를 문자열로 변환한 후, 각 문자를 순회하면서 숫자로 변환해 더하는 방식입니다.


결론

이 문제는 자릿수를 추출하여 더하는 기본적인 문제로, 수학적인 방법이나 문자열 변환을 통해 쉽게 해결할 수 있습니다. 시간 복잡도는 O(log N)이며, 메모리 사용량도 매우 적어 효율적으로 처리할 수 있습니다.

저작자표시 (새창열림)

'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글

[프로그래머스] 문자열 내 p와 y의 개수  (2) 2024.10.14
[프로그래머스] 약수의 합  (2) 2024.10.13
[프로그래머스] 짝수와 홀수  (0) 2024.10.13
[프로그래머스] x만큼 간격이 있는 n개의 숫자  (0) 2024.10.13
[프로그래머스] 평균 구하기  (0) 2024.10.13
'여러가지/알고리즘 & 자료구조' 카테고리의 다른 글
  • [프로그래머스] 문자열 내 p와 y의 개수
  • [프로그래머스] 약수의 합
  • [프로그래머스] 짝수와 홀수
  • [프로그래머스] x만큼 간격이 있는 n개의 숫자
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (283)
      • 여러가지 (108)
        • 알고리즘 & 자료구조 (73)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (39)
        • 파이썬 (31)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (0)
        • 암호화폐 (0)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    그리디
    DP
    Spring Boot
    취업리부트
    자바
    EC2
    Docker-compose
    파이썬
    mybatis
    Spring WebFlux
    Redis
    RDS
    SAA
    프로그래머스
    java
    ecs
    OOP
    항해99
    AWS
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    FastAPI
    백준
    docker
    Python
    WebFlux
    celery
    완전탐색
    시험
    reactor
    spring
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
[프로그래머스] 자릿수 더하기
상단으로

티스토리툴바