프로그래머스 압축 (Java,자바)

jonghyukLee·2022년 9월 21일
0

이번에 풀어본 문제는
프로그래머스 압축 입니다.

📕 문제 링크

❗️코드

import java.util.*;
class Solution {
    public int[] solution(String msg) {
        int[] answer;
        int msgLen = msg.length();

        Queue<String> q = new LinkedList<>();
        for (int i = 0; i < msgLen; i++) {
            q.add(msg.charAt(i)+"");
        }

        Map<String, Integer> dic = new HashMap<>();

        for (int i = 65; i <= 90; i++) {
            dic.put((char)i+"", i - 64);
        }

        List<Integer> result = new ArrayList<>();
        String curString = "";
        while(!q.isEmpty()) {

            while (!q.isEmpty() && dic.containsKey(curString + q.peek())) {
                curString = curString.concat(q.poll());
            }
            // 색인 번호
            result.add(dic.get(curString));
            // 아직 입력이 남았으면,
            if (!q.isEmpty()) {
                dic.put(curString.concat(q.peek()), dic.size() + 1);
            }
            // 초기화
            curString = "";
        }

        int resultSize = result.size();
        answer = new int[resultSize];
        
        for (int i = 0; i < resultSize; i++) {
            answer[i] = result.get(i);
        }
        
        return answer;
    }
}

📝 풀이

주어진 입력을 사전과 비교하여 색인 번호를 출력하는 문제입니다.
모든 입력을 Queue에 담아주고, 최상단 값과 비교하면서 가장 긴 문자열을 찾습니다. 문자열을 찾았다면, 해당하는 색인을 result list에 담아줍니다. 아직 입력값이 남았다면, 방금 문자열과 다음 입력값을 더한 문자열을 사전에 추가해주면 됩니다. 위 과정을 반복하면 해결할 수 있습니다.

📜 후기

문제를 이해하기는 복잡했는데, 구현은 쉬웠던 것 같습니다!

profile
머무르지 않기!

0개의 댓글