본문 바로가기
Problem Solving/카카오 블라인드 기출

2018 - [3차] 압축

by Libi 2021. 8. 7.
반응형

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

[ 문제풀이 ]

HashMap 자료구조를 사용하면 정말 간단하게 해결할 수 있는 문제이다. 문자열 끝까지 진행하면서 현재의 문자열이 HashMap에 존재하는지를 판단하면서 계속해서 갱신해주면 된다.

import java.util.*;

class Solution {
    public int[] solution(String msg) {
    	ArrayList<Integer> list = new ArrayList<>();
        HashMap<String, Integer> hm = new HashMap<>();
        
        //'A' ~ 'Z'까지 넣어줌
        for (int i = 1; i <= 26; ++i) {
            hm.put(Character.toString((char)(64 + i)), i);
        }
        
        int index = 27;
        for (int i = 0; i < msg.length(); ) {
        	String now = msg.substring(i, i + 1);
        	
        	int j = i + 1;
        	//현재 문자열이 HashMap에 존재하면 문자를 추가
        	while (j < msg.length() && hm.containsKey(now + msg.charAt(j))) {
        		now += msg.charAt(j++);
        	}
        	
        	//마지막 인덱스면 종료
        	if (j == msg.length()) {
        		list.add(hm.get(now));
        		break;
        	}
        	
        	//현재 문자열의 색인 번호를 출력
        	list.add(hm.get(now));
        	
        	//다음 문자를 추가한 문자열을 HashMap에 삽입
        	now += msg.charAt(j);
        	hm.put(now, index++);
        	
        	i = j;
        }
        
        int[] answer = new int[list.size()];
        for (int i = 0; i < answer.length; ++i) {
        	answer[i] = list.get(i);
        }
        return answer;
    }
}

 

 

반응형

'Problem Solving > 카카오 블라인드 기출' 카테고리의 다른 글

2018 - [3차] 파일명 정렬  (0) 2021.08.07
2018 - [3차] 자동완성  (0) 2021.08.07
2018 - [3차] 방금그곡  (0) 2021.08.07
2018 - [1차] 다트 게임  (0) 2021.08.07
2018 - [1차] 비밀지도  (0) 2021.08.07

댓글