공부/프로그래머스
[프로그래머스] [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
반응형