자리수 더하기

나의 기록·2026년 5월 28일

코딩테스트

목록 보기
4/35

자리수 구하는 방법도 여러가지네 , 1번 방식으로 풀었는데
2가지 방식이 더있어서 2개 방식으로도 풀어봤다.

문제 설명

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.

N = 123 → 1 + 2 + 3 = 6
N = 987 → 9 + 8 + 7 = 24

제한사항

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

풀이 1 - 문자열 방식

접근법

intString 변환 후 각 문자를 순회하며 숫자로 변환

public int solution(int n) {
    int answer = 0;
    String strNum = String.valueOf(n);

    for (char c : strNum.toCharArray()) {
        answer += c - '0';
    }

    return answer;
}

포인트

  • split("") 대신 toCharArray() 사용 → 정규식 엔진 불필요
  • Integer.valueOf() 대신 c - '0' 사용 → 박싱/언박싱 없음

풀이 2 - 수학 방식

접근법

% 10으로 마지막 자릿수를 추출하고, / 10으로 자릿수를 제거하며 반복

123 % 10 = 3,  123 / 10 = 12  → answer = 3
 12 % 10 = 2,   12 / 10 = 1   → answer = 5
  1 % 10 = 1,    1 / 10 = 0   → answer = 6
  0              → 종료
public int solution(int n) {
    int answer = 0;
    int reminder = n;

    while (reminder > 0) {
        answer += reminder % 10;
        reminder = reminder / 10;
    }

    return answer;
}

포인트

  • 자릿수 개수를 미리 알 필요 없음
  • reminder > 0 조건이 자연스럽게 종료 조건이 됨
  • reminder % 10 == 0인 경우(ex. 10, 100)도 0을 더하므로 조건 분기 불필요

핵심 개념 정리

1. Integer.valueOf() vs Integer.parseInt()

메서드반환 타입특징
Integer.valueOf()Integer (래퍼 클래스)박싱/언박싱 발생
Integer.parseInt()int (기본형)불필요한 객체 생성 없음 ✅

단순 연산에서는 기본형을 반환하는 parseInt()가 적합하다.

2. charint 변환 (아스키코드)

'3' - '0' = 51 - 48 = 3

문자 숫자에서 '0'(아스키 48)을 빼면 해당 숫자의 정수값이 나온다.

Integer.parseInt(String.valueOf(c)) 보다 훨씬 가볍고 빠른 방식이다.

3. split("") vs toCharArray()

방식특징
split("")내부적으로 정규식 엔진 사용, String[] 객체 생성
toCharArray()단순 변환, char[] 생성 ✅

4. 두 풀이 성능 비교

문자열 방식수학 방식
객체 생성String, char[] 생성없음
메모리자릿수만큼 추가 할당변수만 사용
GC 부담있음없음
N이 클수록상대적으로 불리유리

String.valueOf() 내부적으로 String 객체와 char[]를 생성하고,
사용 후 GC 대상이 되는 반면, 수학 방식은 원시 타입 연산만 수행한다.


정리

두 풀이 모두 정답이지만, N의 범위가 크거나 성능이 중요한 상황이라면 수학 방식이 더 유리하다.
단순하고 가독성이 중요한 상황이라면 문자열 방식도 충분히 좋은 선택이다.

profile
뭐든 남겨본다

0개의 댓글