반응형
https://school.programmers.co.kr/learn/courses/30/lessons/131128
import java.util.*;
import java.util.stream.*;
class Solution {
public String solution(String X, String Y) {
String answer = "";
//int[] -> Integer[] 은 되는데
//char[] -> Character[]은 안되는 이유?
//Arrays.stream().boxed.toArray(Character[]::new)
//Arrays.asList();
Map<Character,Integer> mapX = new HashMap<>();
Map<Character,Integer> mapY = new HashMap<>();
Integer[] xInt = new Integer[X.length()];
int j=0;
for(char x : X.toCharArray()) {
xInt[j++]=Character.getNumericValue(x);
}
Arrays.sort(xInt,Collections.reverseOrder());
for(int x : xInt) {
mapX.put((char) (x+'0'), mapX.getOrDefault((char) (x+'0'), 0)+1);
}
for(char x : Y.toCharArray()) mapY.put(x, mapY.getOrDefault(x, 0)+1);
for(char x: mapX.keySet()){
for(int i=0; i<mapX.get(x);i++){
// System.out.println("Key:"+x);
if(mapY.containsKey(x)) {
mapY.put(x, mapY.get(x)-1);
if(mapY.get(x)==0) mapY.remove(x);
answer+=x;
}
}
}
if(answer.startsWith("0")) answer="0";
return answer=answer.equals("")?"-1":answer;
}
}
import java.util.*;
import java.util.stream.*;
class Solution {
public String solution(String X, String Y) {
String answer = "";
List<Character> listX= new ArrayList<>();
List<Character> listY= new ArrayList<>();
for(char x: X.toCharArray()){
listX.add(x);
}
for(char x: Y.toCharArray()){
listY.add(x);
}
int j=0;
List<String> result = new ArrayList<>();
for(char x:listX){
if(listY.contains(x)){
// System.out.println(x);
result.add(x+"");
listY.remove(new Character(x));
// System.out.println(listY.toString());
}
}
Collections.sort(result, (s1,s2) -> (s2+s1).compareTo(s1+s2));
StringBuilder sb = new StringBuilder();
for(String s : result) {
//answer+=s;
sb.append(s);
}
answer=sb.toString();
//#2. 문자열 시작으로 변경
//맨 앞 숫자가 0이면 0을 리턴
if(answer.startsWith("0")) answer="0";
return answer=answer.equals("")?"-1":answer;
}
}
1. 우선순위큐로 풀어보기
2. 아스키코드값으로 풀어보기 (char-48) A:65, 0:48이므로
3. 0~9까지 해당 값만 생각해서 배열로 풀어보기
import java.util.*;
import java.util.stream.*;
class Solution {
public String solution(String X, String Y) {
String answer = "";
//1. 0~9까지의 배열
//2. 우선순위큐 최대힙
//3. 아스키코드 값으로 풀기 -48
//int[] -> Integer[] 은 되는데
//char[] -> Character[]은 안되는 이유?
//Arrays.stream().boxed.toArray(Character[]::new)
//Arrays.asList();
Map<Character,Integer> mapX = new HashMap<>();
Map<Character,Integer> mapY = new HashMap<>();
for(char x : X.toCharArray()) mapX.put(x, mapX.getOrDefault(x, 0)+1);
for(char x : Y.toCharArray()) mapY.put(x, mapY.getOrDefault(x, 0)+1);
int cnt=0;
List<String> strNums = new ArrayList<>();
for(char c : mapX.keySet()){
if(mapY.containsKey(c)){
String tmp = c+"";
tmp=tmp.repeat(Math.min(mapX.get(c), mapY.get(c)));
strNums.add(tmp);
}
}
Collections.sort(strNums, (s1,s2)->(s2+s1).compareTo(s1+s2));
for(String x: strNums){
answer+=x;
}
if(answer.startsWith("0")) answer="0";
return answer=answer.equals("")?"-1":answer;
}
}
반응형
'Server Programming > BackEnd Project' 카테고리의 다른 글
57일차 - TIL (0) | 2023.02.07 |
---|---|
56일차 - TIL (0) | 2023.02.06 |
로또의 최고 순위와 최저 순위 - Collections.frequncy, Collectors.toList(), boxed().toArray(Integer[]::new); (0) | 2023.02.06 |
[알고리즘 정리] - DP, Divide&Conquer, BinarySearch, Dijkstra, Greedy, Kruskal, Prim, Backtracking (0) | 2023.02.05 |
정규표현식과 matches, patterns 메서드, 진법 변환 (0) | 2023.02.03 |