코딩테스트/programmers

[level2] 2018 KAKAO BLIND RECRUITMENT[3차] 압축 JAVA

개발냐옹발 2022. 11. 16. 17:41

 

https://school.programmers.co.kr/learn/courses/30/lessons/17684

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

나는 무엇때문에 이렇게 까지 고민을 했던걸까...?

너무 한번에 같이 실행하려고 해서 생긴 혼란...이랄까?

이 문제는  문제에서 주어진 W , C , W+C 를 보면 답이 보이는 문제이다.

 

static HashMap<String, Integer> hm;
 
	
	public int[] solution(String msg) {
		ArrayList<Integer> list = new ArrayList<Integer>();
		hm = new HashMap<String, Integer>();
 
		for(int i = 0; i < 26; i++) {
			char c = (char)(65 + i);
			hm.put(""+c, i+1);
		}

		String w = "";
		String c = "";
		int num = 0; //압축번호
		for(int i = 0; i < msg.length(); i++) {
			w += msg.charAt(i);	//현재글자
			num = addNum(w);
			if(i + 1 < msg.length()) {
				c = "" + msg.charAt(i+1);
				String wc = w+c;
				if(addNum(wc) != -1) {
					continue;
				}
				w = wc;
			}
			
			list.add(num);
			addMap(w);
			w = "";
		}
		 
	 
		int[] arr = new int[list.size()];
		for(int i = 0; i< list.size(); i++) {
			arr[i] = list.get(i); 
		}
		
		return arr;
	}
	
 
	private void addMap(String str) {
		hm.put(str, hm.size()+1);
	}


	private int addNum(String w) {
		int num = -1;
		if(hm.containsKey(w)) {
			num = hm.get(w);
		}
		return num;
	}