[LeetCode] Split With Minimum Sum

아르당·2026년 10월 15일

LeetCode

목록 보기
547/561
post-thumbnail

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

Problem

양의 정수 num이 주어지고, 다음 조건을 만족하는 음수가 아닌 두 개의 정수 num1과 num2로 나눠라.

  • num1과 num2를 이어 붙인 것은 num의 순열이다.
    • 다시 말해, num1과 num2에 포함된 각 숫자의 출현 횟수를 모두 합한 값은 num에 포함된 해당 숫자의 출현 횟수와 같다.
  • num1과 num2에는 앞 자리에 0이 포함될 수 있다.

num1과 num2의 합으로 가능한 최솟값을 반환해라.

Example

#1
Input: num = 4325
Output: 59
Explanation: 4325를 나눠서 num1은 24와 num2는 35이고, 59의 합이 된다. 59가 실제로 가능한 최소 합을 증명한다.

#2
Input: 687
Output: 75
Explanation: 687을 나눠서 num1은 68과 num2는 7이고, 75라는 최적의 합을 갖는다.

Constraints

  • 10 <= num <= 10^9

Solved

class Solution {
    public int splitNum(int num) {
        int[] nums = new int[10];
        int num1 = 0;
        int num2 = 0;
        int current = 1;

        while(num != 0){
            nums[num % 10]++;
            num /= 10;
        }

        for(int i = 0; i < 10; i++){
            int count = nums[i];

            while(count != 0){
                if(current == 1){
                    num1 = num1 * 10 + i;
                }else{
                    num2 = num2 * 10 + i;
                }

                current *= -1;
                count--;
            }
        }

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

0개의 댓글