숫자 짝궁

https://school.programmers.co.kr/learn/courses/30/lessons/131128

 

문제 제시가 0~9까지니까 X와 Y에 배열을 10칸 만들어놓고 시작한 게 도움이 됐던 것 같다.

또한 "0000" 이렇게 나왔을 때 그냥 int로 형변환 후 다시 string으로 변환하는 작업으로 풀었는데 조건에서 길이가 300만이라고 했는데 이를 모두 int로 변환하는 작업은 오래걸리기도 하고 메모리적으로도 문제가 있다. 그래서 이전에 선언한 배열에서 0의 개수를 세는 방식으로 바꿔서 해결하게 되었다.

using System;
using System.Text;

public class Solution {
    public string solution(string X, string Y) {
        string answer = "";
        StringBuilder stringBuilder = new StringBuilder();
        int[] xArr = new int[10];
        int[] yArr = new int[10];

        for (int i = 0; i < X.Length; i++)
        {
            xArr[X[i] - '0']++;
        }

        for (int i = 0; i < Y.Length; i++)
        {
            yArr[Y[i] - '0']++;
        }


        for (int i = 0; i < xArr.Length; i++)
        {
            int min = xArr[i] > yArr[i] ? yArr[i] : xArr[i];
            for (int j = 0; j < min; j++)
            {
                stringBuilder.Append(i);
            }
        }

        if (stringBuilder.Length > 0)
        {
            char[] cArr = stringBuilder.ToString().ToCharArray();

            Array.Sort(cArr, (x, y) => -x.CompareTo(y));

            answer = new string(cArr);
            bool isOnlyZero = true;
            for (int i = 1; i < 10; i++)
            {
                if (answer.Contains(i.ToString()))
                {
                    isOnlyZero = false;
                    break;
                }
            }

            if (isOnlyZero)
            {
                answer = "0";
            }
        }
        else
        {
            answer = "-1";
        }
        
        return answer;
    }
}

+ Recent posts