https://school.programmers.co.kr/learn/courses/30/lessons/64065
어떤 숫자가 가장 많이 나왔는가를 기준으로 풀려고 하였다
처음에는 한자리 숫자만 가정하고 풀었는데 40분 걸렸다 근데 숫자가 한자리가 아니어서 다 뜯어 고쳐야 했다
다시 고쳐서 푸는데 30분 추가로 걸렸다
숫자들을 어떻게 파싱할지를 처음에 고민했다. 그러다가 글자로 처리해도 되겠구나 생각을 했고
글자를 어떻게 파싱할지를 고민했던거 같다. 그냥 글자가 숫자면 StringBuilder 에 담고
글자가 숫자가 아니면 StringBuilder 에 있던걸 다른 컨테이너로 옮기고 SB를 비우고 다시 담는 식으로 해결하였다. 그러면 연속으로 숫자일때 SB에 여러자리 숫자를 담을 수 있게 된다.
그리고 숫자별로 몇번 등장했는지 카운트를 하였다
카운트가 많은숫자부터 작은거까지 정렬해서 반환하여서 해결하였다
import java.util.*;
class Solution {
public int[] solution(String s) {
HashMap<String, Integer> map = new HashMap<>();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < s.length(); ++i)
{
char c = s.charAt(i);
if(isNum(c))
{
sb.append(c);
}
else if(sb.length() > 0)
{
int cnt = map.getOrDefault(sb.toString(), 0);
map.put(sb.toString(), cnt+1);
sb.setLength(0);
}
}
Set<String> keys = map.keySet();
TreeMap<Integer, String> tmap = new TreeMap<>();
for(String key : keys)
{
tmap.put(map.get(key), key);
//System.out.println(map.get(key));
}
Set<Integer> tkeys = tmap.keySet();
int[] answer = new int[keys.size()];
int i = keys.size()-1;
for(int key : tkeys)
{
answer[i] = Integer.parseInt(tmap.get(key));
i--;
}
return answer;
}
public boolean isNum(char c){
if(c >= '0' && c <= '9')
return true;
return false;
}
}
import java.util.*;
class Solution {
public int[] solution(String s) {
HashMap<String, Integer> map = new HashMap<>();
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(s, "{},");
while(st.hasMoreTokens())
{
String input = st.nextToken();
int cnt = map.getOrDefault(input, 0);
map.put(input, cnt+1);
}
Set<String> keys = map.keySet();
TreeMap<Integer, String> tmap = new TreeMap<>();
for(String key : keys)
{
tmap.put(map.get(key), key);
}
Set<Integer> tkeys = tmap.keySet();
int[] answer = new int[keys.size()];
int i = keys.size()-1;
for(int key : tkeys)
{
answer[i] = Integer.parseInt(tmap.get(key));
i--;
}
return answer;
}
}