https://school.programmers.co.kr/learn/courses/30/lessons/17684
코딩테스트 연습 > 2018 KAKAO BLIND RECRUITMENT > [3차] 압축
난이도: LEVEL2
알고리즘 유형: 구현
문제 분석
그렇게 어려운 난이도는 아니었지만 여러 가지 분기 처리를 해줘야 했다.
나는 HashMap을 사용해서 문제를 풀었다.
우리는 사전에 맞게 숫자를 출력하고 사전에 없으면 숫자를 추가하는 게 목표이다. HashMap<String, Integer>
먼저 길이가 1인 문자들을 HashMap에 초기화 해준다. (A ~ Z)
이제 문자 길이가 2 이상인 문자들은 입력으로 주어진 msg를 탐색하면서 추가하거나 출력해야 한다.
사전 추가 같은 경우 현재 인덱스에서 사전(HashMap)에 key가 없는 문자열을 찾을 때 까지 문자열 추가해 나갔어야 하는데 만약 마지막 index까지 찾았다면 탐색을 멈추고
해당 문자열이 사전에 있는지 없는지 판단 후 출력해야 했다.
정답 코드
import java.util.*;
import java.util.stream.*;
class Solution {
static HashMap<String, Integer> map = new HashMap<>();
public int[] solution(String msg) {
int cnt = 1;
for(char i = 'A'; i <= 'Z'; i++){
map.put(Character.toString(i), cnt++);
}
ArrayList<Integer> list = new ArrayList<>();
StringBuilder sb = new StringBuilder();
Queue<String> q = new LinkedList<>();
IntStream.range(0, msg.length())
.forEach(i -> q.add(Character.toString(msg.charAt(i))));
while(!q.isEmpty()){
while(!q.isEmpty()){
sb.append(q.poll());
if(!map.containsKey(sb.toString())){
break;
}
}
if(map.containsKey(sb.toString())){
list.add(map.get(sb.toString()));
}
else{
map.put(sb.toString(), cnt++); // 사전에 추가
String get = sb.substring(0, sb.length() - 1);
String next = sb.substring(sb.length() - 1, sb.length());
list.add(map.get(get));
sb.setLength(0);
sb.append(next);
if(q.isEmpty()){
list.add(map.get(next));
}
}
}
return list.stream().mapToInt(Integer::intValue).toArray();
}
}
'Algorithm > Programmers Java' 카테고리의 다른 글
[JAVA] 프로그래머스 LEVEL2 오픈채팅방 (2) | 2024.10.10 |
---|---|
[JAVA] 프로그래머스 LEVEL2 [3차] 파일명 정렬 (4) | 2024.10.10 |
[JAVA] 프로그래머스 LEVEL2 후보키 (1) | 2024.10.08 |
[JAVA] 프로그래머스 LEVEL2 k진수에서 소수 개수 구하기 (1) | 2024.10.08 |
[JAVA] 프로그래머스 LEVEL3 2차원 동전 뒤집기 (0) | 2024.10.07 |