어제의 나보다 성장한 오늘의 나

[프로그래머스][Level2][Java] 압축 본문

알고리즘/프로그래머스(Programmers)

[프로그래머스][Level2][Java] 압축

NineOne 2020. 12. 25. 22:17

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

문제풀이

사전 추가 배열을 쓸까 생각하였지만 언제까지 사전을 추가 할지 몰라서 list를 생각하게 되었고

검색을 할려고 하니깐 불편한거 같아서 최종적으로 사전관리는 HashMap으로 하였다.

처음 A~Z를 초기화 하는 작업을 해야되며 while문으로 본문에 나와있는 과정 2~5까지 반복하였다.

사전에 있을시 계속 index를 증가시키며 없을때까지 찾고 없다면 출력값을 list에 저장하고

단어를 사전에 등록 및 초기화 작업을 해주었다. 

코드

import java.util.*;

class Solution {
    public int[] solution(String msg) {
        List<Integer> list = new ArrayList();
        HashMap<String,Integer> hm = new HashMap<String,Integer>();
        
        //초기화
        for(int i=1; i<=26; i++){
            hm.put(Character.toString((char)64+i),i);
        }
        
        int index =0;   
        int temp =0;    // 출력 색인번호 저장
        String str ="";
        
        while(true){
            if(msg.length()==index) {
                list.add(temp);
                break;
            }
            str += msg.charAt(index);
            
            if(hm.containsKey(str)){    // 사전에 있을시
                temp = hm.get(str);
                index++;
            }else{                       // 사전에 없을시 사준 추가 밑 출력 저장
                hm.put(str, hm.size()+1);                
                str ="";
                list.add(temp);
            }
        }
        
        int[] answer = new int[list.size()];
        for(int i=0; i<list.size(); i++){
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}
Comments