두 정수 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 함수를 완성해주세요.
X | Y | result |
---|---|---|
"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;
}
}