반응형

프로그래머스 > 코딩테스트 연습 2018 KAKAO BLIND RECRUITMENT [3차] 압축

문제링크

https://programmers.co.kr/learn/courses/30/lessons/17684?language=java 

 

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

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

programmers.co.kr

 

제출소스

전체 코드

 

 

솔루션 메소드

 

 

 

import java.util.ArrayList;

class Solution {

    ArrayList<String> dictionary = new ArrayList<>();
    ArrayList<Integer> wordIdxList = new ArrayList<>();

    public int[] solution(String msg) {
        init(); // 1단계

        while (true) {
            String word = findLongWord(msg);    // 2단계

            msg = processWord(word, msg);   // 3단계

            if (msg.length() > 0)    //남은 글자가 있다면?
                addNewWord(word, msg); // 4단계
            else
                break;  // 남은 문자열이 없는 경우
        }

        int[] answer = new int[wordIdxList.size()];
        for (int i = 0; i < wordIdxList.size(); ++i) {
            answer[i] = wordIdxList.get(i) + 1;
        }
        return answer;
    }

    /**
     * 1. 사전 초기화
     */
    private void init() {
        char ch = 'A';
        while (ch != 'Z') {
            dictionary.add(String.valueOf(ch));
            ++ch;
        }
        dictionary.add(String.valueOf(ch));
    }

    /**
     * 2. 사전에서 현재 입력과 일치하는 가장 긴 문자열 w를 찾는다.
     */
    private String findLongWord(String msg) {
        int idx = 0;
        String temp;
        String word = null;
        while (idx < msg.length()) {
            ++idx;
            temp = msg.substring(0, idx);
            if (dictionary.contains(temp)) {
                word = temp;
            } else {
                break;
            }
        }
        return word;
    }

    /**
     * 3. w에 해당하는 사전의 색인 번호를 출력하고, 입력에서 w를 제거한다.
     */
    private String processWord(String word, String msg) {
        wordIdxList.add(dictionary.indexOf(word));
        return msg.substring(word.length()); //msg 중 word 를 없앤다
    }

    /**
     * 4. 입력에서 처리되지 않은 다음 글자가 남아있다면(c), w+c에 해당하는 단어를 사전에 등록한다.
     */
    private void addNewWord(String word, String msg) {
        String newWord = word + msg.charAt(0);
        dictionary.add(newWord);
    }
}
반응형

'개발 > 알고리즘' 카테고리의 다른 글

[프로그래머스] 순위 검색  (0) 2021.08.09
프로그래머스 더 맵게  (0) 2021.07.21
프로그래머스 튜플  (0) 2021.07.08
프로그래머스 괄호 변환  (0) 2021.07.01
프로그래머스 최대공약수와 최소공배수  (0) 2021.06.16
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기