[프로그래머스] 숫자 짝궁 / Level 1 / Java

알재·2023년 4월 11일
0

코딩 테스트

목록 보기
14/39

링크

문제링크

문제

두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들을 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다(단, 공통으로 나타나는 정수 중 서로 짝지을 수 있는 숫자만 사용합니다). X, Y의 짝꿍이 존재하지 않으면, 짝꿍은 -1입니다. X, Y의 짝꿍이 0으로만 구성되어 있다면, 짝꿍은 0입니다.

예를 들어, X = 3403이고 Y = 13203이라면, X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 3, 0, 3으로 만들 수 있는 가장 큰 정수인 330입니다. 다른 예시로 X = 5525이고 Y = 1255이면 X와 Y의 짝꿍은 X와 Y에서 공통으로 나타나는 2, 5, 5로 만들 수 있는 가장 큰 정수인 552입니다(X에는 5가 3개, Y에는 5가 2개 나타나므로 남는 5 한 개는 짝 지을 수 없습니다.)
두 정수 X, Y가 주어졌을 때, X, Y의 짝꿍을 return하는 solution 함수를 완성해주세요.

제한사항

  • 3 ≤ X, Y의 길이(자릿수) ≤ 3,000,000입니다.
  • X, Y는 0으로 시작하지 않습니다.
  • X, Y의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.

입출력

XYresult
"100""2345""-1"
"100""203045""0"
"100""123450""10"
"12321""42531""321"
"5525""1255""552"

해결

각 문자열의 숫자의 개수를 저장할 배열 XNumCountArr,YNumCountArr을 선언한다.
X 와 Y 문자열을 탐색하여 문자열의 숫자들을 세어 XNumCountArr,YNumCountArr 에 저장해준다.
XNumCountArr,YNumCountArr 을 서로 탐색하며 인덱스마다 각각 세어진 숫자가 있다면 그 두갯수 중 작은값만큼 인덱스를 문자열로 추가해준다.
인덱스를 거꾸로 탐색하는 이유는 가장 큰 수를 구하려면 큰 숫자가 앞쪽 숫자로 되는것이 제일 큰 숫자를 구할수 있기 때문이다.
겹치는 숫자가 0만 있을 경우가있기에 그 경우 문자열을 "0"으로 다시 바꾸어준다.
겹치는 숫자가 존재하지 않다면 -1을 문자열에 추가해준다.

코드

class Solution {
    public String solution(String X, String Y) {
        int[] XNumCountArr = new int[10];
        int[] YNumCountArr = new int[10];
        StringBuilder answerStr = new StringBuilder();

        for (char ch : X.toCharArray()) {
            XNumCountArr[ch - '0']++;
        }

        for (char ch : Y.toCharArray()) {
            YNumCountArr[ch - '0']++;
        }

        for (int i = 9; i >= 0; i--) {
            if (XNumCountArr[i] > 0 && YNumCountArr[i] > 0) {
                int min = Math.min(XNumCountArr[i],YNumCountArr[i]);

                for(int j = 0; j < min;j ++){
                    answerStr.append(i);
                }
            }
        }


        if (answerStr.length() > 1 && answerStr.charAt(0) == '0') answerStr = new StringBuilder("0");
        if (answerStr.length() < 1) answerStr.append(-1);
        String answer = answerStr.toString();

        return answer;
    }
}
profile
저장소

0개의 댓글