📍 문제 설명
https://programmers.co.kr/learn/courses/30/lessons/17684
코딩테스트 연습 - [3차] 압축
TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34]
programmers.co.kr
💡 접근
첫번째 글자부터 시작해서 다음 글자를 계속해서 이어 붙이는데, 사전에 추가되는 문자열이 최대일 때 출력해주면 되는 문제였다.
👩💻 코드
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
public class Solution {
public int[] solution(String msg) {
int[] answer = {};
HashMap<String, Integer> map = new HashMap<>();
String[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
for(int i = 1; i <= 26; i++) map.put(alphabet[i-1], i);
StringBuilder w = new StringBuilder();
ArrayList<Integer> list = new ArrayList<>();
int indexNumber = 0;
for(int i = 0; i < msg.length(); i++) {
StringBuilder c = new StringBuilder();
w.append(msg.charAt(i));
if(map.containsKey(w.toString())) indexNumber = map.get(w.toString());
String wc = ""; //사전추가될 글자
//다음 글자가 존재하는 경우
if(i < msg.length() - 1) {
c.append(msg.charAt(i+1));
wc = w.toString() + c.toString();
//더한 글자가 사전에 있으면 다음글자 탐색
if(map.containsKey(wc.toString())) continue;
}
//출력
list.add(indexNumber);
//사전 추가
map.put(wc, map.size()+1);
w.setLength(0);
}
answer = new int[list.size()];
for(int i = 0; i < answer.length; i++) {
answer[i] = list.get(i);
}
System.out.println(Arrays.toString(answer));
return answer;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Solution s = new Solution();
String m = "KAKAO";
s.solution(m);
}
}
'Algorithm > programmers' 카테고리의 다른 글
[2022 카카오 블라인드]주차 요금 계산 (0) | 2022.05.03 |
---|---|
[2022 카카오 블라인드]k진수에서 소수 개수 구하기 (0) | 2022.05.03 |
[2018 카카오 블라인드 3차]방금그곡 (0) | 2022.04.13 |
[2018 카카오 블라인드 1차]캐시 (0) | 2022.04.12 |
[2018 카카오 블라인드 1차]프렌즈4블록 (0) | 2022.04.11 |