알고리즘/프로그래머스

[3차] 압축

베리영young 2025. 7. 24. 23:34

사용 알고리즘: 구현

사용 언어: java

 

import java.util.*;

class Solution {
    Map<String, Integer> map = new HashMap<>(); //이건 꼭 써야 해..
    int nxt = 27;
    
    public int[] solution(String msg) {
        initMap();
        List<Integer> list = new ArrayList<>();
        
        for(int i = 0; i < msg.length(); i++) {
            StringBuilder sb = new StringBuilder();
            int move = 0;
            for(int j = i; j < msg.length(); j++) {
                sb.append(msg.charAt(j));
                
                if(!map.containsKey(sb.toString())) {
                    map.put(sb.toString(), nxt++);
                    break;
                }
                
                move++;
            }
            
            //
            i += move - 1;
            //if(i != msg.length() - 1) System.out.println(sb.toString());
            if(i != msg.length() - 1) sb.deleteCharAt(sb.length() - 1);
            list.add(map.get(sb.toString()));
        }
        
        //System.out.println(list);
        
        return listToArr(list);
    }
    
    public int[] listToArr(List<Integer> list) {
        int[] a = new int[list.size()];
        for(int i = 0; i < list.size(); i++) {
            a[i] = list.get(i);
        }
        return a;
    }
    
    //
    public void initMap() {
        for(char c = 'A'; c <= 'Z'; c++) {
            String key = String.valueOf(c);
            map.put(key, c - 'A' + 1);
        }
        
        //System.out.println(map);
    }
}

 

 

처음엔 머리로만 풀려고 했고

두 번째는 손으로 끄적여보면 서 한 문제...

 

문제 자체가 어렵지는 않은 거 같은데

로직이 좀 복잡하니까... 손으로 끄적이는 연습도 하자

'알고리즘 > 프로그래머스' 카테고리의 다른 글

여행경로  (1) 2025.08.10
단속카메라  (2) 2025.08.10
택배상자  (3) 2025.07.22
JadenCase 문자열 만들기  (1) 2025.07.13
카드 뭉치  (0) 2025.07.12