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

민지킴·2021년 4월 17일
0

프로그래머스

목록 보기
14/42
post-thumbnail

문제 링크

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

문제 풀이

A~Z를 사전에 등록한다.

String word = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        for(int i=0; i<word.length();i++){
            dictionary.add(word.substring(i,i+1));
        }

현재 문자 : String w = msg.substring(i,i+1);

idx는 현재 인덱스 다음 번호이다.
이 인덱스가 msg의 길이보다 큰 경우는 w가 마지막 글자라는 뜻이다.
그렇기에 while문을 돌지 않고 바로 arr에 값을 넣어준다.

현재 문자 w와, 다음 문자 c를 합쳐 임시 문자 temp를 만들고
그 단어가 서전에 없다면 if(dictionary.indexOf(temp)==-1)
temp를 단어에 넣고 break,

그 단어가 사전에 있다면 현재 문자는 temp가 되고, 다음 for문에서 idx를 다시 돌지 않기 위해서
i++, idx++를 해준다.

코드


import java.util.*;

class Solution {
    public int[] solution(String msg) {
        List<String>dictionary = new ArrayList();
        String word = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        for(int i=0; i<word.length();i++){
            dictionary.add(word.substring(i,i+1));
        }
        //뽑는값은 indexOf("문자")+1
        List<Integer>arr = new ArrayList();
        
        for(int i=0; i<msg.length(); i++){
            String w = msg.substring(i,i+1);
            int idx = i+1;
            while(idx<msg.length()){
                String c = msg.substring(idx,idx+1);
                String temp = w+c;
                if(dictionary.indexOf(temp)==-1){
                    dictionary.add(temp);
                    break;
                } else {
                    w = temp;
                    i++;
                    idx++;
                }
            }
            arr.add(dictionary.indexOf(w)+1);           
        }    
        
        int[] answer = new int[arr.size()];
        for(int i=0; i<answer.length; i++){
            answer[i] = arr.get(i);
        }
        
        return answer;
    }
}
profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글