프로그래머스 - 압축
알고리즘/프로그래머스

프로그래머스 - 압축

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

1. 유형

해시맵

 

2. 시뮬레이션

  • 딕셔너리에 등록되지 않은 가장 긴 문자열 탐색
    • 등록되지 않은 문자열은 딕셔너리에 등록
  • 문자열 끝까지 위를 반복

 

3. 코드

import java.util.*;
class Solution {
   	static List<Integer> ans = new ArrayList<>();
    static Map<String, Integer> map = new HashMap<>();
    static int index =27;
    static public int[] solution(String msg) {
        int[] answer = {};
        int head = 0;
        for(int i=0; i<26; i++){
        	char ch = (char)('A'+i);
            map.put(String.valueOf(ch), i+1);
        }
        while(head < msg.length()){
            head=simulation(msg, head);
        }
        answer = new int[ans.size()];
        for(int i=0; i<answer.length; i++)
            answer[i]=ans.get(i);
        return answer;
    }
    static int simulation(String msg, int head){
        int tail=msg.length();
        String temp ="";
        for(int i=head; i<msg.length(); i++){
        	temp += msg.charAt(i);
        	if( !map.containsKey(temp)){
                map.put(temp, index++);
                ans.add(map.get(msg.substring(head, i)));
                tail = i;
                return tail;
            }
        }
        ans.add(map.get(temp));
        return tail;
    }
}

4. 느낀점

A-Z와 index를 함께 딕셔너리에 등록하는 부분에서 버벅거렸다.

int -> char -> String 형태로 형변환을 해줘야한다