튜플

LJM·2023년 8월 14일
0

programmers

목록 보기
55/92

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;
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글