공부/프로그래머스

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

빈v 2024. 7. 31. 22:55
728x90

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

 

프로그래머스

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

programmers.co.kr

 

프로그래머스 [3차] 압축 자바 풀이

난이도: Lv2

 

풀이

book에 A~Z까지 알파벳을 우선 저장 후

msg를 돌며 book에서 str+msg.charAt(idx)의 색인번호를 찾고 없을 경우 while문에서 나오며, 

색인번호가 있을 경우 다음 단어를 더하여 색인번호가 없기 전까지 문자열을 더해준다.

즉 색인번호가 있는 가장 긴 문자열을 찾는다.

 

찾은 문자열의 색인 번호를 answer에 넣고,

문자열에 다음 단어를 더하여 색인번호를 등록한다.

 

 

코드

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class Solution {
    public List<Integer> solution(String msg) {
        List<Integer> answer = new ArrayList<>();
        Map<String, Integer> book = new HashMap<>();

        char word='A';
        for(int i=1;i<='Z'-'A'+1;i++){
            book.put(word+"", i);
            word+=1;
        }

        int idx=0;
        while(idx<msg.length()){
            String str="";
            while(idx<msg.length()){
                if(!book.containsKey(str+msg.charAt(idx))){
                    break;
                }else{
                    str+=msg.charAt(idx);
                }
                idx++;
            }
            answer.add(book.get(str));

            if(idx<msg.length()){
                book.put(str+msg.charAt(idx), book.size()+1);
            }
        }
        return answer;
    }
}
728x90
반응형