삐까냥의 파도타기

카카오 블라인드 채용 신입 공채 3차 코딩 테스트) 2번 문제 본문

코딩/카카오 코딩 테스트

카카오 블라인드 채용 신입 공채 3차 코딩 테스트) 2번 문제

금손형아 2018. 3. 6. 11:05

문제 출처 : http://tech.kakao.com/2017/11/14/kakao-blind-recruitment-round-3/


테스트 케이스 개수가 너무 적어서, 정답인지 모르겠네요.


(테스트 케이스가 많을 경우 정답이 아닌 경우가 종종 있어요)



그냥 LZW 압축 설명이 이해하기 어렵네요.


(시험장에서 이해하기 어려운 문제 보면 멘붕이죠.)


그냥 제시된 예제를 보면서 이해하는게 더 쉬웠습니다.


해설을 보면 LZW 압축방식(수도코드)을 그대로 구현하면 된다고하네요.


저는 설명 안보고, 예제 보고 이해 한 후 코딩했어요.




2018년 3월 6일


public class kakao_3_2 {


static ArrayList<String> defaultDictionary = new ArrayList<>();

public static void main(String args[]) {

setDefaultDictionary();

solution("KAKAO");

solution("TOBEORNOTTOBEORTOBEORNOT");

solution("ABABABABABABABAB");

}

static void solution(String text) {

ArrayList dictionary = (ArrayList) defaultDictionary.clone();

ArrayList<Integer> result = new ArrayList<>();

for (int i = 0; i < text.length(); i++) {

int lastPosition = i;

for (int j = i + 1; j <= text.length(); j++) {

//단어 가져오기

String temp = text.substring(i, j);

//사전에서 단어 찾기

int tempPosition = dictionary.indexOf(temp);

if (tempPosition >= 0) { //이미 사전에 존재할 경우

lastPosition = tempPosition;

//마지막 단어라면

if (j == text.length()) {

result.add(lastPosition + 1); //결과에 추가

i = j; //i 포문 종료 하기 위함

break; //j 포문 종료

}

} else { //사전에 존재하지 않을 경우

dictionary.add(temp); //사전에 삽입

result.add(lastPosition + 1); //결과에 추가

i = j-2;

break;

}

}

}

System.out.println(result);

}

static void setDefaultDictionary() {

for (int i = 0; i <= 25; i++) {

defaultDictionary.add(String.valueOf((char)(i + 65)));

}

}