알고리즘
프로그래머스) 압축-python
1일1공부실천하자
2023. 1. 24. 18:02
https://school.programmers.co.kr/learn/courses/30/lessons/17684
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(msg):
answer = []
number = 27
alpha = {
'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
}
number = 27
c,w = 0,0
while True:
c += 1
if c == len(msg):
answer.append(alpha[msg[w:c]])
break
if msg[w:c+1] not in alpha:
alpha[msg[w:c+1]] = number
number += 1
answer.append(alpha[msg[w:c]])
w = c
return answer
우선 문제 설명이 매우 불친절했다.
나는 알파벳이 딕셔너리에 있으면 answer에 append, 없으면 alpha에 추가
인줄 알았지만
없으면 그 이전 단어를 append, 알파에 추가였다.
처음엔
# from collections import deque
def solution(msg):
# queue=deque()
answer = []
# queue.append(msg[0])
# s = msg[0]
# msg = msg[1:]
alpha = {
'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
}
number = 27
isBreak = False
while len(msg) >= 1:
s = ''
for i in range(len(msg)):
s = s + msg[i]
if s not in alpha:
alpha[s] = number
number += 1
answer.append(alpha[s[0:-1]])
msg = msg[i:]
break
if len(msg) == 1:
isBreak = True
if isBreak:
break
# while msg:
# isBreak = False
# for i in range(len(msg)):
# s = s + msg[i]
# if s not in alpha:
# alpha[s] = number
# number += 1
# answer.append(s[0:-1])
# for i in range(len(msg)):
# s = ''
# for j in range(len(msg)):
# s =
# while msg:
# s = ''
# isBreak = False
# for i in range(len(msg)):
# s = s + msg[i]
# if s in alpha:
# answer.append(alpha[s])
# if len(msg) ==
# else:
# alpha[s] = number
# number += 1
# while msg:
# for i in range(len(msg)):
# s = s+msg[i]
# if s in alpha:
# # msg = msg[i:]
# answer.append(alpha[s])
# else:
# alpha[s] = number
# number += 1
# msg = msg[i:]
# break;
return answer
이런 식으로 생각했었다.
디큐도 선언해보고 여러 가지를 시도해봤지만 while문 탈출 조건을 끝내 생각하지 못했다.