상세 컨텐츠

본문 제목

[3차] 압축 (2018 KAKAO BLIND RECRUITMENT)

프로그래머스 코딩테스트 풀이

by 발발개발 2022. 7. 29. 09:13

본문

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

 

프로그래머스

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

programmers.co.kr

 

풀이

import java.util.*;

class Solution {
    public int[] solution(String msg) {
        LinkedList<String> list = new LinkedList<>(Arrays.asList(msg.split("")));
        List<String> dictionary = new ArrayList<>();

        for (char ch = 'A'; ch <= 'Z'; ch++) {
            dictionary.add(String.valueOf(ch));
        }

        StringBuilder result = new StringBuilder();
        StringBuilder sb;

        while (!list.isEmpty()) {
            sb = new StringBuilder(list.poll());

            while (true) {
                if (list.isEmpty()) {
                    break;
                }

                sb.append(list.poll());

                if (!dictionary.contains(sb.toString())) {
                    break;
                }
            }

            if (list.isEmpty()) {
                if (dictionary.contains(sb.toString())) {
                    result.append(dictionary.indexOf(sb.toString()) + 1).append(",");
                } else {
                    String lastStr = String.valueOf(sb.charAt(sb.length() - 1));
                    String preStr = sb.deleteCharAt(sb.length() - 1).toString();

                    result.append(dictionary.indexOf(preStr) + 1).append(",");
                    result.append(dictionary.indexOf(lastStr) + 1).append(",");
                }
            } else {
                dictionary.add(sb.toString());

                if (sb.length() >= 2) {
                    list.addFirst(String.valueOf(sb.charAt(sb.length() - 1)));
                    sb.deleteCharAt(sb.length() - 1);
                }

                result.append(dictionary.indexOf(sb.toString()) + 1).append(",");
            }
        }

        return Arrays.stream(result.deleteCharAt(result.length() - 1).toString().split(",")).mapToInt(Integer::parseInt).toArray();
    }
}

관련글 더보기

댓글 영역