이숭간 공부기록
[프로그래머스] 파이썬 _ 압축 ( 카카오 2018 ) 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/17684
문제유형 : 문자열, 구현
문제풀이 :
- 문자열가지고 주어진 문제조건대로 구현하라는 카카오스러운 문제다.
- 하라는대로 하면 되긴하는데 while문 조건에서 마지막 빠져나오는 부분에서 조금 헷갈려서 ide디버깅기능을 사용해서 풀긴햇다,,
- # 가장 길면서 사전에 존재하는 문자열을 찾는다. (while문 이용)
# 해당 문자열을 키로하는 값을 answer배열에 기록한다.
# 문자열에 다음문자 하나 더한것을 사전에 더한다.
# 문자열을 줄인다.
# 위 과정을 반복한다. 문자열이 없어질때까지
정답코드 :
def solution(msg):
answer = []
dic = {chr(i + 64): i for i in range(1, 27)}
end_val = 26
# 가장 길면서 존재하는 문자열을 찾는다.
# 해당 문자열을 키로하는 값을 출력한다.
# 문자열에 다음문자 하나 더한것을 사전에 더한다.
# 문자열을 삭제한다.
# 위 과정을 반복한다. 문자열이 없어질때까지
return s(msg, dic, end_val)
def s(msg, dic, end_val):
answer = []
msg = list(msg)
while len(msg) > 1:
i = 1
curr = ''
while True:
s = ''.join(msg[:i])
# 현재값이 사전에 있다면 저장한후에 한번더 늘려서 확인한다.
if s in dic:
curr = s # 현재까지 최대길이 문자
i += 1
# 이부분이 없으면 무한로딩이된다. 인덱싱은 i가 msg길이가 넘어가도 에러가 안남
# 즉 남은 문자열 사전에 등록된 문자이면서 더이상 추가할 문자가 없으면 바로 끝내야한다.
if i > len(msg):
answer.append(dic[curr])
return answer
# 더이상 없다면
else:
next_key = s
i -= 1
break
# 사전에 존재하면서 가장 긴 문자열을 찾았다. = curr
answer.append(dic[curr])
# 사전에 새로 추가할 키값
end_val += 1
dic[next_key] = end_val
msg = msg[i:]
else:
answer.append(dic[msg[0]])
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 파이썬 _ 파일명 정렬 (2018 KAKAO) (0) | 2021.08.21 |
---|---|
[프로그래머스] 파이썬 _ 캐시 (카카오 2018) (0) | 2021.08.20 |
[프로그래머스] SQL고득점킷 _ String, Date (0) | 2021.08.13 |
[프로그래머스] SQL고득점킷 _ IS NULL (0) | 2021.08.13 |
[프로그래머스] SQL고득점킷 _ JOIN (0) | 2021.08.12 |