레벨: 1
언어: 자바(Java)
해당문제는 자바코딩을 기본적으로 할줄알면 풀수있는 문제라고 생각합니다.
저는 Map을 사용해서 풀었습니다.
풀이방법
1. x와 y의 문자 카운터를 담는 map 선언 및 값 put
2. x와 y의 같은 문자에 해당하는 최소카운팅을 값을 list에 추가
3. list 값이 없을시 -1
4. list에 0만 존재시 0
5. 외의 값 반환
가장 좋아요 많이 받은 코드
저와의 차이점이라면 저는 Map 사용했지만 좋아요 많이받는 코드는 배열을 사용해서 index가 key이고 값이 카운팅 값이라는 차이점입니다.
1. x와 y의 배열 선언
2. 0의 아스키코드가 48인데 character값에서 48을 빼면 해당 맞는 int값으로 변환
3.빈문자열 비교시 -1
4.정렬된값이 들어있는 문자열에서 첫번째값이 0이면 0
5.외의 값 반환
import java.util.*;
import java.util.stream.*;
class Solution {
public String solution(String X, String Y) {
Map<String, Integer> xMap = new HashMap<>();
Map<String, Integer> yMap = new HashMap<>();
List<String> list = new ArrayList<>();
for(String key: X.split("")) {
xMap.put(key, xMap.getOrDefault(key, 0)+1);
}
for(String key: Y.split("")) {
yMap.put(key, yMap.getOrDefault(key, 0)+1);
}
for(String key: xMap.keySet()) {
if(!yMap.containsKey(key)) continue;
int length = Math.min(xMap.get(key), yMap.get(key));
for(int i = 0; i < length; i++) {
list.add(key);
}
}
String result = list.stream()
.sorted(Collections.reverseOrder())
.collect(Collectors.joining());
if(result.isEmpty()) return "-1";
if(result.replaceAll("0", "").isEmpty()) return "0";
return result;
}
}
class Solution {
public String solution(String X, String Y) {
StringBuilder answer = new StringBuilder();
int[] x = {0,0,0,0,0,0,0,0,0,0};
int[] y = {0,0,0,0,0,0,0,0,0,0};
for(int i=0; i<X.length();i++){
x[X.charAt(i)-48] += 1;
}
for(int i=0; i<Y.length();i++){
y[Y.charAt(i)-48] += 1;
}
for(int i=9; i >= 0; i--){
for(int j=0; j<Math.min(x[i],y[i]); j++){
answer.append(i);
}
}
if("".equals(answer.toString())){
return "-1";
}else if(answer.toString().charAt(0)==48){
return "0";
}else {
return answer.toString();
}
}
}