Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 문자열다루기
- 프로그래머스
- 자바
- component
- Android
- 세그먼트트리
- 카카오블라인드
- BOJ
- 코틀린
- 알고리즘
- 다이나믹프로그래밍
- 코딩
- activity
- GIT
- 백준
- 운영체제
- 동적계획법
- 안드로이드
- dfs
- 그래프
- 코딩테스트
- 생명주기
- 트리
- 이분탐색
- 분할정복
- 배열
- 스택
- 문자열
- BFS
- 완전탐색
Archives
- Today
- Total
HS_development_log
2018 KAKAO BLIND - 압축 본문
반응형
1. 문제
2. 접근
주어진 LZW압축 과정을 그대로 따라가면 되기 때문에 크게 어려운 점은 없었다.
색인번호와 단어가 짝을 이뤄서 저장되기 때문에 HashMap을 활용했다. contains도 O(1)로 빠르기도 하고..
만약 map에 포함되어 있지 않다면 map에 추가하고 포함되어있다면 그걸 그대로 사용했다.
3. 코드
import java.util.ArrayList;
import java.util.HashMap;
class Solution {
public int[] solution(String msg) {
HashMap<String, Integer> map = new HashMap<>();
ArrayList<Integer> list = new ArrayList<>();
int idx = 26;
for(int i=0;i<26;i++){
char ch = (char)('A'+i);
map.put(ch+"",i+1);
}
StringBuilder sb = new StringBuilder();
for(int j=0;j<msg.length();j++){
sb.append(msg.charAt(j));
if(!map.containsKey(sb.toString())){ // 포함안된게 나오는 순간
map.put(sb.toString(),++idx); // 인덱스에 넣고
sb.deleteCharAt(sb.length()-1); // 마지막자리 빼고
list.add(map.get(sb.toString()));
j--;
sb = new StringBuilder();
}
if(j==msg.length()-1){
list.add(map.get(sb.toString()));
}
}
int[] answer = new int[list.size()];
for(int i=0;i<list.size();i++){
answer[i] = list.get(i);
}
return answer;
}
}
4. 결과
반응형
'Algorithm-프로그래머스' 카테고리의 다른 글
2018 KAKAO BLIND - 캐시 (0) | 2020.09.03 |
---|---|
2019 KAKAO BLIND - 블록 게임 (0) | 2020.09.02 |
2018 KAKAO BLIND - 프렌즈4블록 (0) | 2020.08.27 |
2018 KAKAO BLIND - 뉴스 클러스터링 (0) | 2020.08.27 |
2020 KAKAO BLIND - 기둥과 보 설치 / Java (0) | 2020.08.26 |