[LeetCode] Calculate Digit Sum of a String

아르당·2026년 8월 21일

LeetCode

목록 보기
478/561
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

숫자로 구성된 문자열 s와 정수 k가 주어진다.
한 라운드는 s의 길이가 k보다 크면 완료된다. 한 라운드는 다음과 같다.

  1. s를 크기가 k인 연속된 그룹으로 나누고, 처음 k개 문자는 첫 번째 그룹, 그 다음 k개 문자는 두 번째 그룹이다. 단, 마지막 그룹 크기는 k보다 작을 수 있다.
  2. 모든 숫자의 합을 나타낸 문자열로 각 s의 그룹을 대체해라. 예를 들어, "346"은 3 + 4 +6 = 13이라서 "13"으로 대체된다.
  3. 연속된 그룹을 새로운 문자열 형태로 병합해라. 문자열의 길이가 k보다 크면 1단계부터 반복한다.

모든 라운드가 끝난 후 s를 반환해라.

Example

#1
Input: s = "11111222223", k = 3
Output: "135"
Explanation:

  • 첫 번째 라운드에서, s를 크기 3의 그룹 "111", "112", "222", "23"으로 나눈다.
    각 그룹의 합은 1 + 1 + 1 = 3, 1 + 1 + 2 = 4, 2 + 2 + 2 = 6, 2 + 3 = 5로 계산된다.
    그래서 s는 첫 번째 라운드 후에 "3" + "4" + "6" + "5" = "3465"가 된다.
  • 두 번째 라운드에서, s를 "346", "5"로 나눈다.
    각 그룹의 합은 3 + 4 + 6 = 13, 5 = 5로 계산된다.
    그래서 s는 두 번째 라운드 후에 "13" + "5" = "135"가 된다.

s.length <= k라서 답으로 "135"를 반환한다.

#2
Input: s = "00000000", k = 3
Output: "000"
Explanation:
s를 "000", "000", "00"으로 나눈다.
각 그룹의 합은 0 + 0 + 0 = 0, 0 + 0 + 0 = 0, 0 + 0 = 0으로 계산된다.
s는 "0" + "0" + "0" = "000"이고 길이는 k와 같아서, "000"을 반환한다.

Constraints

  • 1 <= s.length <= 100
  • 2 <= k <= 100
  • s는 오직 숫자로 구성된다.

Solved

class Solution {
    public String digitSum(String s, int k) {
        while(s.length() > k){
            StringBuilder sb = new StringBuilder();
            int i = 0;

            while(i < s.length()){
                int sum = 0;
                int repeat = k;

                while(i < s.length() && repeat-- > 0){
                    sum += s.charAt(i) - '0';
                    i++;
                }

                sb.append(sum);
            }

            s = sb.toString();
        }

        return s;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글