본문 바로가기

알고리즘

프로그래머스) 압축-python

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문 탈출 조건을 끝내 생각하지 못했다.