반응형
2018 KAKAO BLIND RECRUITMENT 문제로 LZW 압축을 구현하는 문제이다.
문제 풀이
1. 먼저 각 문자열에 대한 색인 번호를 넣을 사전을 선언한다.
2. A - Z 까지를 색인 번호 1 - 26 으로 넣어준다.
3. 맨 앞 문자부터 사전에서 찾아보며 사전에 있으면 문자열의 길이를 늘려가며 찾는다. 문자열이 사전에서 없어지면 해당 문자열을 색인번호의 최댓값에 1을 더해 넣는다.
4. 3과정에서 사전에 있는 가장 긴 문자열을 answer에 넣는다.
5. 다음 문자부터 3-4과정을 반복한다.
예를 들면, 'KAKAO'의 경우, K를 먼저 찾고 있으면 KA를 찾고 또 있으면 KAK를 찾는 식으로 진행하며 해당 문자열이 사전에 없을 때 까지 진행하여, 해당 문자열이 사전에 없으면 사전에 넣고, 다음 문자부터 다시 시작한다. KA까지 사전에 있다면 KAK를 사전에 넣고, KA의 색인 번호를 answer에 넣는다.
Python Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
from string import ascii_uppercase
def solution(msg):
dic = {}
idx=1
for a in ascii_uppercase:
dic[a] = idx
idx+=1
answer = []
i=0
j=i+1
while i < len(msg)-1:
j=i+1
while j<= len(msg) and msg[i:j] in dic:
j+=1
#msg[i:j-1]는 dic에 있다
answer.append(dic[msg[i:j-1]])
dic[msg[i:j]]=idx
idx += 1
i=j-1
#print(dic)
if i == len(msg)-1:
answer.append(dic[msg[-1]])
return answer
|
cs |
문제 링크
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 SQL 오랜 기간 보호한 동물(2) (0) | 2020.03.23 |
---|---|
프로그래머스 SQL 중성화 여부 확인하기 (0) | 2020.03.23 |
프로그래머스 Lv3 타일 장식물 (0) | 2020.03.22 |
프로그래머스 Lv3 N-Queen (0) | 2020.03.22 |
프로그래머스 Lv3 베스트앨범 (0) | 2020.03.20 |