akjfal

[Programmers] 튜플 본문

알고리즘/programmers

[Programmers] 튜플

akjfal 2021. 6. 17. 15:43
// num stack is order
// 1. num[100,000]
// 2. answer.length = substring(2, n-2) and remove },{
// 3. num[charAt(index)]++
// 4. answer = [n, n-1 ...]

import java.util.HashMap;
import java.util.Iterator;

class Solution {
    public int[] solution(String s) {
        int[] num = new int[100001];
        s = s.substring(2, s.length()-2);
        String[] ansLength = s.split("\\}");
        int[] answer = new int[ansLength.length];
        int length = ansLength.length;
        s = s.replaceAll("\\}", "");
        s = s.replaceAll("\\{", "");
        String[] numList = s.split(",");
        HashMap<Integer, Integer> map = new HashMap<>();
        for(int i = 0; i < numList.length; i++){
            num[Integer.parseInt(numList[i])]++;
            if(!map.containsKey(Integer.parseInt(numList[i]))){
                map.put(Integer.parseInt(numList[i]), 0);
            }
        }
        Iterator<Integer> itr = map.keySet().iterator();
        while(itr.hasNext()){
            int n = itr.next();
            answer[length-num[n]] = n;
        }
        return answer;
    }
}

1. replaceAll이나 split에서 정규 표현식을 사용하는데 특수문자들은 \\를 사용해야함을 몰라 검색해봄

2. 문제가 이해가 제대로 안됬는데 해결을 보고 알았다. 좀더 고민해봤어야 했다. -> 반복된 숫자가 많을 수록 첫번째로 나오는 수

Comments