DecordRay

[프로그래머스] Level2 : [3차] 압축[Python] 본문

알고리즘/프로그래머스

[프로그래머스] Level2 : [3차] 압축[Python]

DecordRay 2023. 1. 18. 00:54
728x90
반응형

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/17684

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 :

1. 사전 초기화

2. 현재 입력부터 한 문자씩 이어붙인 문자열이 사전에 없을때까지 반복문 진행(내부 반복문)

3. 2번에서 temp2에 저장한 사전에 없는 문자열을 사전에 추가

4. temp에 저장된 문자열(현재 입력으로부터 사전에 있는 가장 길이가 긴 문자열)을 answer 리스트에 추가

 

+ 추가적인 설명은 주석 참고

 

 

코드 :

def solution(msg):
    answer = []
    dic = {'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 = 0
    idx = 27    # 현재 딕셔너리 길이 + 1(딕셔너리에 없는 문자열은 해당 값을 넣어줄것이므로)
    
    for i in range(len(msg)):
        if count != 0:  # count가 0이 아니라면 0이 될때까지 반복문 건너뛰기
            count -= 1
            continue
        temp = msg[i]   # 현재 i번째에 해당하는 문자를 temp에 저장
        temp2 = ''
        for j in range(i+1,len(msg)):
            if temp + msg[j] not in list(dic.keys()):   # 이어붙인 문자열이 딕셔너리에 없을경우
                temp2 = temp+msg[j]     # temp + msg[j]를 temp2에 저장
                break
            temp += msg[j]  # 이어붙인 문자열이 딕셔너리에 있을 경우
            count += 1      # count + 1 증가
        answer.append(dic[temp])    # temp 값을 answer리스트에 추가
        dic[temp2] = idx            # temp2(딕셔너리에 없는 문자열)를 사전에 추가
        idx+=1  # 딕셔너리에 집어넣을 값 1 증가
        
    return answer

 

728x90
반응형
Comments