반응형

압축 - 프로그래머스

 

문제 링크

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

문제 복기

2018 카카오 블라인드 코딩테스트 문제였다. 

3차라고 붙어져있는데, 3차 코딩테스트 문제 중 하나였던 것 같다.

 

카카오 문제의 특징은 지문이 길지만, 상당히 친절한 편인 것 같다. 꼼꼼하게 읽으면서 구현하면 생각보다 쉽다는 느낌을 받는다.

당황하지 않고, 차분하게 문제를 읽는 습관을 들이는데 좋은 훈련이 되는 것 같다.

 


 

문제로 넘어가보자.

문제에서는 친절하게 압축 과정을 알려주고, 예시까지 보여줬다.

 

LZW 압축 과정

 

문제를 풀면서 알게된 사실은 제목에서도 힌트를 얻을 수 있다는 점이었다.

압축과정이 없다면, [11, 1, 11, 1, 15] 가 출력이 되었겠지만, "압축" 이라는 제목으로부터

압축과정을 거친다면 [11, 1, 27, 15] 가 정답이 된다.

 

 

아래의 코드를 보자.

 

첫 번째 반복문을 통해 알파벳 사전을 먼저 만들어주었다.

하나하나 직접 입력하는 것도 하나의 방법일 듯 하다.

압축 - 문제풀이

 

처음에는 반복문으로 접근하려고 했는데, 생각보다 쉽지 않았고,

오히려 KAO 같이 계속 접근해야하는 상황이 발생하면 반복문으로 해결하기는 쉽지 않을 것으로 생각을 했고,

재귀함수가 떠올라 재귀함수로 구현했다.

 

result 배열에 push를 해야하는 타이밍이 중요했는데,

단어가 dictionary에 없을 때까지 들어간 후, 없기 전의 단어를 push해줘야 한다.

 

if문 분기점에 따라 호출해야하는 재귀함수의 인자도 달리 전달해주어야 했다.

else문에서는 다음 인덱스에 해당하는 단어를, if문에서는 'KA'와 같은 단어를 전달해줘야 했다.

 

마지막에 result를 반환하면 끝

반응형