프로그래머스 lv2 압축

namkun·2023년 1월 22일
0

코딩테스트

목록 보기
62/79

문제 링크

압축

풀이

  • 처음에 재귀로 푸는 것인 줄은 알아냈으나, 재귀를 짜는게 아직 서툴러서 너무 고통스러웠다.
  • 결국은 남이 푼 것을 보고 도움을 받아 풀었다.
  • 재귀 문제를 조금 더 많이 풀어보자.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

class Solution {
    public int[] solution(String msg) {
        List<Integer> answer = new ArrayList<>();
        List<String> dict = init();

        recursive(dict, answer, msg);

        return answer.stream()
                .mapToInt(Integer::intValue)
                .toArray();
    }

    private List<String> init() {
        return Arrays.stream("ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("")).collect(Collectors.toList());
    }

    private void recursive(List<String> dict, List<Integer> answer, String msg) {
        for (int i = 0; i < msg.length(); i++) {
            String subStr = msg.substring(0, i + 1);
            if (!dict.contains(subStr)) {
                dict.add(subStr);
                answer.add(dict.indexOf(msg.substring(0, i)) + 1);
                recursive(dict, answer, msg.substring(i));
                break;
            } else {
                if (i + 1 == msg.length()) {
                    answer.add(dict.indexOf(msg.substring(0, i + 1)) + 1);
                    break;
                }
            }
        }
    }
}
profile
개발하는 중국학과 사람

0개의 댓글