알고리즘 공부/프로그래머스

(Java)프로그래머스 코딩테스트 연습 - 2018 KAKAO BLIND RECRUITMENT - [3차] 압축

HRuler 2020. 12. 8. 15:35

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));
        }
    }
}