320x100
https://school.programmers.co.kr/learn/courses/30/lessons/17684
알파벳에 대한 딕셔너리 alpha_dict를 미리 만든다.
그리고 msg 내 word를 살펴 보면서 alpha_dict에 없는 단어는 alpha_dict 맨 끝에 추가하고, 마지막으로 살펴본 글자부터 압축을 다시 시작한다.
구현 조건이 은근 까다로웠던 것 같다. 두 가지 조건을 잘 구현해야 한다.
- 첫 번째 알파벳은 무조건 alpha_dict에 존재하므로, 다음 단어를 스킵할 때 len(word) == 1의 경우는 스킵하면 안 된다. 무조건 alpha_dict에 있기 때문. 그래서 첫 글자에 대한 코드는 while문 앞에 따로 구현하였다.
- word가 마지막 글자까지 오면 해당 idx를 저장하고 탐색을 바로 마친다.
이 때 while 문 안에 있는 건 이중 루프이므로 flag를 정의해서 바로 끝내도록 구현하였다.
(이거 찾느라 30분 정도 걸린듯)
def solution(msg):
answer = []
alpha_dict = {'A':1,'B':2,'C':3,'D':4,'E':5,'F':6,'G':7,'H':8,'I':9,'J':10,'K':11,'L':12,'M':13,'N':14,
'O':15,'P':16,'Q':17,'R':18,'S':19,'T':20,'U':21,'V':22,'W':23,'X':24,'Y':25,'Z':26}
# 스킵할 인덱스 수 count
count = 0
# while문에서 즉시 종료하기 위한 flag
flag = False
for i, word in enumerate(msg):
idx = alpha_dict[word]
if count >0: # count만큼 pass.
count -= 1
continue
if len(word)==1: # 첫 글자는 무조건 dict에 존재함. 다음 step으로
idx = alpha_dict[word]
if i+1 == len(msg): # msg 마지막 글자면 break.
answer.append(idx)
break
i += 1
word += msg[i]
while word in alpha_dict.keys(): # 둘 이상 문자열이 dict에 있는 경우 -> dict에 없는 문자를 만날 때까지.
idx = alpha_dict[word]
if i+1 == len(msg): # msg 마지막 글자면 break.
answer.append(idx)
flag = True # 이중 loop이므로 flag를 이용해 즉시 종료
break
i += 1
word += msg[i]
count += 1
if flag == True:
break
# dict에 없는 경우.
alpha_dict[word] = 27 + len(answer)
answer.append(idx)
return answer
'코딩테스트' 카테고리의 다른 글
[파이썬] 방금그곡 - 2018 KAKAO BLIND RECRUITMENT [CODING TEST #41] (0) | 2022.08.04 |
---|---|
[파이썬] 가운데 글자 가져오기 [CODING TEST #40] (0) | 2022.08.04 |
[파이썬] 예상 대진표 - 2017 팁스타운 [CODING TEST #38] (0) | 2022.08.03 |
[파이썬] 핸드폰 번호 가리기 [CODING TEST #37] (0) | 2022.08.03 |
[파이썬] 실패율 - 2019 KAKAO BLIND RECRUITMENT [CODING TEST #36] (0) | 2022.08.03 |
댓글