티스토리 뷰

 

문제보러가기

 

 

 

코딩테스트 연습 - [3차] 압축

TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34]

programmers.co.kr

움.. 다른방법을 생각해보려고 했으나 생각이 안나서 그냥 풀었는데 맞았던 문제!

java의 HashMap을알고 있다면 접근이 수월했을듯한 문제이다.

 

접근방법

1."A"-"Z"까지를 미리 HashMap에 넣는다-key를 String으로 사용,사전의 역할

2.주어진 String을 탐색하면서 사전에 있을경우 다음 인덱스 글자를 포함해서 go

3.사전에 없다면 이전 인덱스까지의 String에 해당하는 value를 사전에서 찾아 answer에 기록

 

접근방법은 간단하지만 index,i,j를 설정해주는것때문에 몇번 문제가 있었다;;

다른분들 코드를 보니 간단하고 깔끔하던데,,, 더 노력해야겠다!!

 

 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class Solution{

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String msg="TOBEORNOTTOBEORTOBEORNOT";//테스트 String
		List<Integer> a = new ArrayList<Integer>();
        //사전으로 사용될 map설정
		HashMap<String,Integer> h = new HashMap<String,Integer>();
		for(int i=1;i<='Z';i++){
			h.put( Character.toString((char)('A'+i-1)),i);
		}
        
		int key=27;//다음 사전의 키를 설정	
		for(int i=0;i<msg.length();i++){
			int idx=1;//substring의 끝 인덱스를 늘려주면서 확인 
			for(int j=i;j<idx+i;j++){
				if(j==msg.length()) break;
                //사전에 있는경우idx를 늘려 다음단어를 확인
				if(h.containsKey(msg.substring(i, j+1))){
					
					if(idx+i>=msg.length()){
						a.add(h.get(msg.substring(i, j+1)));
						i=j;
						break;
					}
					idx++;
                 //사전에 없는 경우 답과 사전에 각각 추가
				}else{
					a.add(h.get(msg.substring(i, j)));
					h.put(msg.substring(i, j+1), key++);
					i=j-1;
					break;
									
				}
			}
		}
		int[] answer = convertIntegers(a);

	}
    //List -> Array 변환 함수
	public static int[] convertIntegers(List<Integer> integers)
	{
	    int[] ret = new int[integers.size()];
	    for (int i=0; i < ret.length; i++)
	    {
	        ret[i] = integers.get(i).intValue();
	        System.out.print(ret[i]+" ");
	    }
	    return ret;
	}

}

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함