[ 프로그래머스 ] #17684 : [3차] 압축 - JAVA

🔗 [3차] 압축

import java.util.*;
class Solution {
    public int[] solution(String msg) {
        //색인 출력을 저장하는 리스트
        List<Integer>list=new ArrayList<>();

        // [단어, 색인 번호]
        Map<String, Integer> map=new HashMap<>();
        for(int i=0;i<26;i++){// A ~ Z 저장 
            char c=(char)('A'+i);
            map.put(String.valueOf(c),i+1);
        }

        char [] arr=msg.toCharArray();// 배열로 변환

        for(int i=0;i<arr.length;i++){// 한 사이클 (한 row)
            String w=Character.toString(arr[i]);//현재 입력

            for(int j=i+1;j<arr.length;j++){//현재 입력 부터 색인에 없는 글자까지 탐색
                String c=Character.toString(arr[j]);// 다음 글자

                if(!map.containsKey(w+c)){// 다음 글자까지 해서 없는 경우
                    list.add(map.get(w));// 색인 출력
                    map.put(w+c,map.size()+1);// 색인 등록
                    break;// 다음 사이클로 

                }else{// 다음 글자까지 해도 있는 경우
                    w=w+c;//w 업데이트
                    i++;//  예제1의 w가 KA 라면 다음 w는 O가 돼야 하므로 i도 증가
                } 
            }
            if(i==arr.length-1)list.add(map.get(w));//마지막은 현재 입력 출력만 하고 종료

        }
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}