본문 바로가기
프로그래머스/Python

[프로그래머스] [3차] 압축 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 8. 8.
728x90
반응형

 

 

프로그래머스

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

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

  1. 딕셔너리로 사전을 생성한다. d = {}
  2. 1부터 26까지 반복하며 for i in range(1, 27)
  3. 영문자 A부터 Z까지를 키로 하여 숫자를 저장한다. d[chr(i + 64)] = i
  4. 현재 첫 글자 위치를 저장할 변수를 생성하고 초기화한다. now = 0
  5. 현재 첫 글자가 단어의 길이를 넘어가기 전까지 반복한다. while (now < len(msg))
  6. 문자열 길이를 저장할 변수를 생성하고 1로 초기화한다. cnt = 1
  7. 현재 단어의 마지막 글자 위치를 저장할 변수를 생성하고 첫 글자 위치로부터 문자열 길이를 더한 위치로 저장한다. next = now + cnt
  8. 단어에서 문자열을 추출하고 해당 문자열이 사전에 있을 때 while (msg[now : next + cnt] in d)
  9. 만약 그다음 위치가 단어의 길이를 넘어가면 if (next + cnt > len(msg))
  10. 단어의 끝을 넘어갔으므로 종료한다. break
  11. 반면에 단어의 길이 안에 있다면 다음 글자까지 판별을 해야 하므로 문자열 길이를 1 증가시킨다. cnt += 1
  12. 문자열의 마지막 위치를 첫 글자 위치에 문자열 길이를 더한 값으로 저장한다. next = now + cnt
  13. 문자열에 해당하는 번호를 정답 리스트에 추가한다. answer.append(d[msg[now : next]])
  14. 문자열에 한 글자를 추가한 문자열을 사전에 추가한다. d[msg[now : next + 1]] = i + 1
  15. 다음 찾을 문자열의 첫 글자 위치를 전 문자열의 마지막 글자 위치로 설정한다. now = next
  16. 사전에 추가했으므로 다음 위치로 넘어간다. i += 1
반응형

3. 소스코드

def solution(msg):
    answer = []
    
    d = {}
    for i in range(1, 27):
        d[chr(i + 64)] = i
        
    now = 0
    while (now < len(msg)):
        cnt = 1
        next = now + cnt
        while (msg[now : next + cnt] in d):
            if (next + cnt > len(msg)):
                break
            else:
                cnt += 1

        next = now + cnt
        answer.append(d[msg[now : next]])
        d[msg[now : next + 1]] = i + 1
        now = next
        i += 1
        
    return answer
728x90
반응형