1. 문제
https://programmers.co.kr/learn/courses/30/lessons/17684?language=java
코딩테스트 연습 - [3차] 압축
TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34]
programmers.co.kr
2. 나의 풀이
import java.util.*;
class Solution {
public ArrayList<Integer> solution(String msg) {
ArrayList <Integer> answer = new ArrayList<>();
ArrayList<String> arr = new ArrayList<>();
//배열에 A ~ Z까지 추가하는 메소드
for(int i = 65; i <= 90; i = i + 1) {
//System.out.println((char)i);
arr.add((char)i + "");
}
//System.out.println("arr : " + arr);
for(int i = 0; i < msg.length(); i = i + 1) {
if(i == 0) {
if(msg.length() == 1) {
answer.add(arr.indexOf(msg.charAt(i) + "") + 1);
return answer;
}else {
//System.out.println(arr.indexOf(msg.charAt(i) + ""));
answer.add(arr.indexOf(msg.charAt(i) + "") + 1);
arr.add(msg.substring(i, i + 2));
continue;
}
}
for(int j = 0; j < msg.length() - i; j = j + 1) {
if(!arr.contains(msg.substring(i, msg.length() - j))) {
continue;
}else if(arr.contains(msg.substring(i, msg.length() - j))) {
if(msg.length() - j + 1 > msg.length()) {
answer.add(arr.indexOf(msg.substring(i, msg.length() - j)) + 1);
}else {
answer.add(arr.indexOf(msg.substring(i, msg.length() - j)) + 1);
arr.add(msg.substring(i, msg.length() - j + 1));
}
i += msg.length() - j - i - 1;
break;
}
}
//System.out.println("arr : " + arr);
}
return answer;
}
}
3. 다른 사람 풀이
import java.util.ArrayList;
import java.util.HashMap;
class Solution {
static HashMap<String, Integer> map = new HashMap<String, Integer>();
static ArrayList<Integer> list = new ArrayList<Integer>();
static char[] arr;
static int num = 1;
public int[] solution(String msg) {
for(int i = 0;i < 27;i++) {
map.put(String.valueOf((char)(65+i)), i+1);
}
arr = msg.toCharArray();
while(true) {
String tmp;
if(num == arr.length) tmp = "" + arr[num-1];
else tmp = "" + arr[num - 1] + arr[num];
encoding(tmp);
if(num > arr.length) break;
}
int[] answer = new int[list.size()];
int size = 0;
for(int i : list) {
answer[size++] = i;
}
return answer;
}
static void encoding(String tmp) {
int ans = 0;
if(map.containsKey(tmp) && num < arr.length - 1) {
encoding(tmp + arr[++num]);
}
else if(map.containsKey(tmp)){
num += 2;
list.add(map.get(tmp));
}
else {
map.put(tmp, map.size());
tmp = tmp.substring(0, tmp.length()-1);
num++;
list.add(map.get(tmp));
}
}
}