Early Riser
생각정리
Early Riser
전체 방문자
오늘
어제
  • 분류 전체보기 (128)
    • JS (19)
    • React (33)
    • React Native (2)
    • Library, Tool (13)
    • CSS (2)
    • Algorithm (40)
    • Computer Science (3)
    • 회고 (3)
    • AI (13)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • 구현
  • lightgbm
  • useEffect
  • 프로그래머스
  • 손실함수
  • local minima
  • 알고리즘
  • 부스트캠프 9기
  • global minima
  • LGBM
  • 부스트캠프 합격 후기
  • RNN
  • javascript
  • boosting
  • 백준
  • react
  • useState
  • 논문리뷰
  • 비동기
  • BFS
  • 밑바닥
  • 오늘의불경
  • 부스트캠프 합격
  • 완전탐색
  • 파이썬
  • dfs
  • 딥러닝
  • js
  • 자바스크립트
  • 백트래킹

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Early Riser

생각정리

프로그래머스: [3차] 압축 (파이썬, 구현)
Algorithm

프로그래머스: [3차] 압축 (파이썬, 구현)

2022. 12. 20. 10:17

간단한 구현 문제이나 푸는데는 30분정도 걸린 것 같다.. 대기업 코딩 테스트에는 구현 문제가 한 두문제씩 나오는 경우가 많아 여러가지 케이스들을 미리 해보는게 빠른 구현에 도움이 될 것 같다.

 

문제를 살펴보면 주어진 문자열을 LZW라는 알고리즘으로 압축을 해야 하는데 이 알고리즘은 사전의 인덱스를 이용하여 해당하는 문자의 인덱스를 출력하는 방식이다.

 

따라서 문제를 풀기 위해서는 우선 대문자들로 dictionary를 미리 초기화 시켜야함을 알 수 있다. 그 후 반복문을 이중중첩하여 문자열을 탐색하는데 내부의 반복문은 dictionary가 계속 늘어나기에 그에 맞춰 문자열을 dictionary의 key에 없을때까지 더하는 용도이다.

 

from string import ascii_uppercase


def solution(msg):
    answer = []
    dic = {}
    # dictionary 생성, 나중에 dictionary에 새로운 변수들을 저장하기 위해서 마지막 인덱스를 변수에 저장.
    last_i = 0
    for i, alphabet in enumerate(list(ascii_uppercase)):
        dic[alphabet] = i + 1
        last_i = i + 1
    # 인덱스가 불규칙하게 바뀌므로 while문 사용
    m = 0
    while m < len(msg):
        keys = list(dic.keys())
        cash = msg[m]
        index = m + 1
        while index < len(msg):
            # 시작문자열 + 다음문자열이 dictionary의 key들에 없을때까지 문자열 더함
            if cash + msg[index] in keys:
                cash += msg[index]
                index += 1
            else:
                break
        answer.append(dic[cash])
        # 22줄에서 index에 1을 더하기에 index가 문자열의 마지막 인덱스보다 커지는 것 방지
        if index < len(msg):
            dic[cash + msg[index]] = last_i + 1
            last_i += 1
        m = index
    return answer

'Algorithm' 카테고리의 다른 글

백준 2870번: 수학숙제 (javascript, 구현)  (0) 2023.03.25
프로그래머스: 주차 요금 계산 (파이썬, 구현)  (0) 2022.12.20
프로그래머스: k진수에서 소수 개수 구하기 (파이썬, 구현)  (0) 2022.12.19
프로그래머스: n^2 배열 자르기 (파이썬, 구현)  (0) 2022.12.19
프로그래머스: [1차] 뉴스 클러스터링 (파이썬, 구현)  (0) 2022.12.19
    'Algorithm' 카테고리의 다른 글
    • 백준 2870번: 수학숙제 (javascript, 구현)
    • 프로그래머스: 주차 요금 계산 (파이썬, 구현)
    • 프로그래머스: k진수에서 소수 개수 구하기 (파이썬, 구현)
    • 프로그래머스: n^2 배열 자르기 (파이썬, 구현)
    Early Riser
    Early Riser
    2년차 프론트엔드 개발자입니다. https://github.com/EarlyRiser42

    티스토리툴바