반응형
프로그래머스 > 코딩테스트 연습 2018 KAKAO BLIND RECRUITMENT [3차] 압축
문제링크
https://programmers.co.kr/learn/courses/30/lessons/17684?language=java
제출소스
import java.util.ArrayList;
class Solution {
ArrayList<String> dictionary = new ArrayList<>();
ArrayList<Integer> wordIdxList = new ArrayList<>();
public int[] solution(String msg) {
init(); // 1단계
while (true) {
String word = findLongWord(msg); // 2단계
msg = processWord(word, msg); // 3단계
if (msg.length() > 0) //남은 글자가 있다면?
addNewWord(word, msg); // 4단계
else
break; // 남은 문자열이 없는 경우
}
int[] answer = new int[wordIdxList.size()];
for (int i = 0; i < wordIdxList.size(); ++i) {
answer[i] = wordIdxList.get(i) + 1;
}
return answer;
}
/**
* 1. 사전 초기화
*/
private void init() {
char ch = 'A';
while (ch != 'Z') {
dictionary.add(String.valueOf(ch));
++ch;
}
dictionary.add(String.valueOf(ch));
}
/**
* 2. 사전에서 현재 입력과 일치하는 가장 긴 문자열 w를 찾는다.
*/
private String findLongWord(String msg) {
int idx = 0;
String temp;
String word = null;
while (idx < msg.length()) {
++idx;
temp = msg.substring(0, idx);
if (dictionary.contains(temp)) {
word = temp;
} else {
break;
}
}
return word;
}
/**
* 3. w에 해당하는 사전의 색인 번호를 출력하고, 입력에서 w를 제거한다.
*/
private String processWord(String word, String msg) {
wordIdxList.add(dictionary.indexOf(word));
return msg.substring(word.length()); //msg 중 word 를 없앤다
}
/**
* 4. 입력에서 처리되지 않은 다음 글자가 남아있다면(c), w+c에 해당하는 단어를 사전에 등록한다.
*/
private void addNewWord(String word, String msg) {
String newWord = word + msg.charAt(0);
dictionary.add(newWord);
}
}
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[프로그래머스] 순위 검색 (0) | 2021.08.09 |
---|---|
프로그래머스 더 맵게 (0) | 2021.07.21 |
프로그래머스 튜플 (0) | 2021.07.08 |
프로그래머스 괄호 변환 (0) | 2021.07.01 |
프로그래머스 최대공약수와 최소공배수 (0) | 2021.06.16 |
최근댓글