https://school.programmers.co.kr/learn/courses/30/lessons/64065
처음부터 너무 어렵게 생각했습니다.
다른 그냥 문자열 자체로 순서대로 차분히 접근했다면 풀 수 있는 문제였습니다.
하지만 다른 분의 풀이가 더 깔끔하고 평소에 몰랐던 클래스를 활용하여 푸셨기 때문에 같이 정리하겠습니다.
Pattern 객체는 Perl 문법과 비슷한 형태로 정의된 정규 표현식
문자열로 정의한 정규표현식은 사용되기 전에 반드시 Pattern 클래스의 인터스턴스로 컴파일 되어야 합니다.
컴파일된 패컨은 Mathcer 객체를 만드는 데 사용되면 Matcher 객체는 임의의 입력 문자열이 패턴에 부합되는지 여부를 판가람하는 기능을 담당합니다.
Matcher 객체가 사용되는 주요 세가지 목적
1) 주어진 문자열 전체가 특정 패턴과 일치하는 가를 판단(matches).
2) 주어진 문자열이 특정 패턴으로 시작하는가를 판단(lookingAt).
3) 주어진 문자열에서 특정 패턴을 찾아낸다(find).
5) 특정 문자열을 찾아 새로운 문자열로 교체하는 기능도 제공된다.
import java.util.*;
import java.util.regex.*;
class Solution {
public int[] solution(String s) {
Map<Integer,Integer> map = new HashMap<>();
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(s);
while(matcher.find()){
int num =
Integer.parseInt(s.substring(matcher.start(), matcher.end()));
map.put(num,map.getOrDefault(num,0)+1);
}
return map.keySet().stream().sorted(Comparator.comparing(k->map.get(k)).reversed()).mapToInt(i->i).toArray();
}
}
Pattern pattern = Pattern.compile("\d+");의 의미를 다시 봐야겠다.
import java.util.*;
class Solution {
public ArrayList<Integer> solution(String s) {
ArrayList<Integer> answer = new ArrayList<>();
//1. 앞뒤 {{,}} 제거
s= s.substring(2);
s= s.substring(0,s.length()-2);
//2. 사이에 존재하는 },{ 를 -로 바꾼다.
s=s.replace("},{","-");
//3. -를 기준으로 배열 만들기
String[] subS = s.split("-");
//3. 길이에 따라 정렬하기
Arrays.sort(subS,new Comparator<>(){
public int compare(String o1, String o2){
return o1.length() -o2.length();
}
});
//4. 길이가 짧을 수록 자주 등장하는 숫자이므로 앞에서 차곡차곡 넣기
for(String str : subS){
String[] temp = str.split(",");
for(String t : temp){
int tInt = Integer.parseInt(t);
if(!answer.contains(tInt)){
answer.add(tInt);
}
}
}
return answer;
}
}