study/알고리즘
[python] programmers - 압축
It's Hyeeun Time
2022. 8. 13. 01:07
https://school.programmers.co.kr/learn/courses/30/lessons/17684
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
SOLUTION
- 사전에 한 글자 길이를 가진 단어들의 색인 번호 정보를 추가
- msg를 현 위치에서 한 글자씩 늘려가며 글자가 추가된 단어가 사전에 있는지 확인
- 최대 길이의 색인 번호가 존재하는 단어를 찾아 answer에 추가해줌
- 위의 단어 + 다음 위치 알파벳을 추가한 단어가 사전에 없는 경우 해당 단어를 현재 최대 색인 번호 + 1로 정보 저장
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
def solution(msg):
# 정답 배열
answer = []
# 사전dict {'A': 1, 'B': 2, ...}
words = {}
# 한글자 A~Z 알파벳 색인 번호 정보를 사전 dict에 추가
for i in range(ord('Z') - ord('A') + 1):
words[(chr(i+65))] = i+1
# while 통해 단어를 확인
i = 0
while i < len(msg):
# 현재 위치 시작 지점 알파벳을 우선 word로 지정
word = msg[i]
# j는 다음 위치 알파벳을 포함한 단어가 words에 있는지 확인하기 위한 변수
j = 1
# 다음 알파벳이 존재하며 알파벳을 추가한 단어가 사전에 있을 때까지 다음 알파벳 추가
while i+j < len(msg) and word in words:
word += msg[i+j]
j += 1
# 만일 단어가 words에 있는 단어라면 answer에 해당 단어의 색인 번호를 넣고
if word in words:
answer.append(words[word])
# 그 단어만큼을 뛰어서 msg 확인
i += len(word)
# 만일 단어가 words에 없다면
else:
# 현재 words에서 가장 큰 색인 번호를 추출해 해당 단어를 max 색인 번호 + 1에 추가
max_val = max(words.values())+1
words[word] = max_val
# 그리고 마지막 한 자리를 뺀 단어의 색인 번호를 answer에 추가
answer.append(words[word[:len(word)-1]])
# 한 자리 뺀 단어의 길이만큼 뛰어서 msg 확인
i += len(word)-1
return answer
|
cs |