본문 바로가기

PS/프로그래머스

[프로그래머스 LV 2] 압축 (파이썬/python)

728x90

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

 

코딩테스트 연습 - [3차] 압축

TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34]

programmers.co.kr

 

반복문을 사용해서 모든 경우를 탐색해주었다.

chr( )  아스키코드로 변경해줄 수 있는 함수를 사용해서 딕셔너리에 A~Z까지의 val값을 넣어주었다.

(ord( ) 는 아스키코드를 숫자로 바꾸는 함수)

 

딕셔너리를 사용해서 키와 벨류값을 지속적으로 수정해주며 answer값을 채워감

각 코드에 주석이 달려있다!

 

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
def solution(msg):
    answer = []
    dic = {}
    n = 1
 
    # A ~ Z 까지 인덱스를 아스키코드를 이용해 저장한다
    for i in range(6591):
        dic[chr(i)] = n
        n += 1
 
    next_idx = 0
    for i in range(len(msg)):
        if next_idx > 0:
            next_idx -= 1
            continue
        next_idx = 0
        str_list = msg[i]
        middle_str = msg[i]
        print(middle_str)
        for j in range(i + 1len(msg)):
            # 추가 문자를 포함한 문자열을 str_list에 저장
            str_list += msg[j]
 
            if str_list in dic:
                # 만약 추가문자열 포함한것이 dic안에 있으면 일단 middle에 저장
                middle_str = str_list
                next_idx += 1
                continue
 
                # 없다면 그 전 문자열까지인 middle까지의 값을 answer에 저장
                # 그리고 dic에 그 다음 문자열까지인 str_list를 추가해줌
            else:
                break
        print(middle_str)
        answer.append(dic[middle_str])
        dic[str_list] = len(dic) + 1
 
    return answer
cs
728x90