programmers_[3차] 압축_java

2023. 4. 10. 10:05Algorithm/Programmers

728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.*;

class Solution {
    public int[] solution(String msg) {
        int[] answer;
        List<Integer> list = new ArrayList<>();
        
        // 사전
        Map<String, Integer> dict = new HashMap<>();
        
        // A - Z 초기화
        int idx= 1;
        for(int i = 0; i<26; i++){ 
            dict.put(Character.toString('A' + i), idx++);
        }
        
        int msgLength = msg.length();
        
        
        StringBuilder sb = new StringBuilder();
        
        for(int i = 0; i<msgLength; i++){         
            // 현재 입력 w가 사전에 있는 경우
            if(dict.containsKey(sb.toString() + Character.toString(msg.charAt(i)))){
                sb.append(Character.toString(msg.charAt(i)));
                continue;
            }
            // 현재 입력 w가 사전에 없는 경우
            else{
                list.add(dict.get(sb.toString()));
                dict.put(sb.toString() + Character.toString(msg.charAt(i)), idx++);                
                sb.setLength(0);
                sb.append(Character.toString(msg.charAt(i)));
            }    
        }
        
        // 남은 것 처리
        list.add(dict.get(sb.toString()));
        
        // list to array;
        int listSize = list.size();
        answer = new int[listSize];
        int tmp = 0;
        for(int i : list){
            answer[tmp++] = i;
        }
        return answer;
    }
}

'Algorithm > Programmers' 카테고리의 다른 글

programmers_주차 요금 계산_java  (0) 2023.04.10
programmers_[3차] n진수 게임_java  (0) 2023.04.10
programmers_할인 행사_java  (0) 2023.04.07
programmers_피로도_java  (0) 2023.04.06
programmers_타겟 넘버_java  (0) 2023.04.06