[문제풀이] 압축
업데이트:
2018 Kakao Blind Recruitment 기출 문제
문제 링크 : 압축
풀이 시간 : 20분
1. 문제 풀이
문제에서 제시된 LZW 압축 알고리즘 구현
1) HashMap을 이용하여 사전을 구현
2) “현재 입력 + 다음 글자”가 사전에 있는지 판별
3-1) 사전에 있을 경우
- 현재 입력을 다음 글자까지 포함하고 2번으로3-2) 사전에 없을 경우
- 현재 입력의 사전 값을 arr에 따로 저장
- “현재 입력 + 다음 글자”을 사전에 저장
4) 문자열 끝까지 가면 종료
2. 소스 코드
static public int[] solution(String msg) {
int[] answer;
// 출력값 리스트
LinkedList<Integer> arr = new LinkedList<Integer>();
// 사전
HashMap<String, Integer> hm = new HashMap<String, Integer>();
char c = 'A';
// A ~ Z까지 기본 사전 만들기
for (int i = 1; i <=26; i++) {
hm.put(c+"", i);
c++;
}
int num = 27;
for (int i = 0; i < msg.length(); i++) {
for (int j = 1; ; j++) {
// 문자열 끝까지 갔을 때
if(i+j>msg.length()) {
// 마지막 출력 값 저장
arr.add(hm.get(msg.substring(i, i+j-1)));
i=i+j-2;
break;
}
// 현재 입력 + 다음 글자
String temp = msg.substring(i,i+j);
if(!hm.containsKey(temp)) {
// 출력 값 저장
arr.add(hm.get(msg.substring(i, i+j-1)));
// 현재 입력 + 다음 글자 사전에 저장
hm.put(temp, num);
num++;
i=i+j-2;
break;
}
}
}
// return 형식 int[]
answer = new int[arr.size()];
// 출력 값을 배열에 저장
for (int i = 0; i < answer.length; i++) {
answer[i] = arr.poll();
}
return answer;
}
`` 3. 후기
영상처리 수업에서 구현해봤기 때문에 쉬웠다.