Coding Test/프로그래머스(Python)
[프로그래머스/Python] Level 2_[3차] 압축 (2018 KAKAO BLIND RECRUITMENT)
syunze
2023. 10. 11. 14:53
📌문제 유형
2018 KAKAO BLIND RECRUITMENT
📌문제
📌나의 문제풀이
- check 함수에서 가장 긴 문자열 w 찾기
- 사전에 없는 단어일 경우, 그 전 인덱스 문자열까지를 리턴
- w+c 사전 등록 시, msg 문자열 길이를 넘어가지 않을 때만 사전에 등록
- 넘어가면 while문 자체를 종료
def check(now_char,msg,i,idx,char_dict):
now_char = msg[i:i+idx]
if now_char not in char_dict.keys() or i+idx == len(msg)+1:
return msg[i:i+idx-1]
else:
return check(now_char,msg,i,idx + 1,char_dict)
def solution(msg):
answer = []
char_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}
i = 0
while True:
if i == len(msg)+1:
break
now_char = msg[i]
now = check(now_char,msg,i,1,char_dict)
answer.append(char_dict[now])
if i + len(now) < len(msg):
char_dict[now + msg[i + len(now)]] = list(char_dict.values())[-1] + 1
else:
break
i = i + len(now)
return answer
📌다른 사람의 문제풀이
def solution(msg):
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
d = {k:v for (k,v) in zip(alphabet, list(range(1,27)))}
answer = []
while True:
if msg in d:
answer.append(d[msg])
break
for i in range(1, len(msg)+1):
if msg[0:i] not in d:
answer.append(d[msg[0:i-1]])
d[msg[0:i]] = len(d)+1
msg = msg[i-1:]
break
return answer
📌리뷰
- 딕셔너리 만들 때, {k:v for (k,v) in zip(alphabet, range(1,27))} 적용하기
- 놓친 부분 : 현재 입력과 일치하는 가장 긴 문자, while문 맨 뒷부분 처리
- check 함수에서 가장 긴 문자열 w 찾기
- 재귀함수에서 주의할 점 : 재귀에서 return 안해주면 none 나옴. 꼭꼭 답과 재귀함수 모두 return 해주기
- while문 처리
- 항상 끝에 어떻게 처리할지 확인하기 꼭꼭!
(어렵지 않은 문제인데 사소한 구현으로 시간 많이 씀)
728x90