본문 바로가기
문제풀이

[프로그래머스] 압축 java

by AndoneKwon 2021. 5. 6.

시키는데로 잘 풀면 된다.
내가 푼 방법의 핵심은 우선 스트링빌더에 다음 문자를 넣고 해당되는 값이 Map에 들어가있지 않으면 해당 값을 Map에 추가하여주는 동시에 List에 집어 넣어 준다. 시간복잡도는 아마도 O(N) 안에는 끝나지 않을까 싶다.

import java.util.*;

class Solution {
    public int[] solution(String msg) {
        int[] answer = {};
        char[] charArr = msg.toCharArray();
        List<Integer> list = new ArrayList<>();


        Map<String,Integer> dic = new HashMap<>();

        for(int i=0;i<27;i++) {
            dic.put(Character.toString('A'+i),i+1);
        }

        int lastIndex = 27;
        StringBuilder sb = new StringBuilder();

        for(int i=0;i<msg.length();i++) {
            char checkChar = charArr[i];

            sb.append(checkChar);

            if(dic.containsKey(sb.toString())) {
                if(i==msg.length()-1) {
                    list.add(dic.get(sb.toString()));
                    break;
                }
            }
            else if(!dic.containsKey(sb.toString())) {
                i--;
                dic.put(sb.toString(),lastIndex);
                lastIndex++;
                sb.deleteCharAt(sb.length()-1);
                list.add(dic.get(sb.toString()));
                sb = new StringBuilder();
            }
        }

        answer = new int[list.size()];
        for(int i = 0;i<list.size();i++) {
            answer[i] = list.get(i);
        }

        return answer;
    }
}