알고리즘

프로그래머스 [3차] 압축 (JAVA)

박카스마시며코딩 2022. 6. 23. 13:04

https://programmers.co.kr/learn/courses/30/lessons/17684

 

코딩테스트 연습 - [3차] 압축

TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34]

programmers.co.kr

 

저는 Map을 이용해 문제를 해결하였습니다.

Map을 통해 문제에서의 사전을 구현하였고, Map에서 못 찾을때까지 subString을 만들면서 index를 찾아나가 문제를 해결하였습니다.

 

import java.util.*;
class Solution {
    public int[] solution(String msg) {
        int NUMBER = 1;
        Map<String,Integer> dic = new HashMap<>();
        for(int i = 0 ; i < 'Z' - 'A'+1 ; i++){
            char now = (char)('A'+i);
            dic.put(now+"",NUMBER++);
        }
        List<Integer> result= new LinkedList<>();
        for(int i = 0 ; i < msg.length() ; i++){
            int index = 0;
            String sub = "";
            for(int j = i + 1 ; j <= msg.length() ;  j++){
                sub = msg.substring(i,j);
                if(dic.containsKey(sub)){
                    index = dic.get(sub);
                    if(j == msg.length()){
                        i = j;
                    }
                    continue;
                }else{
                    i = j-2;
                    break;
                }
            }
            dic.put(sub,NUMBER++);
            result.add(index);
        }
        // System.out.println(result);
        int[] answer = {};
        answer = result.stream().mapToInt(Integer::intValue).toArray();
        return answer;
    }
}