문제
https://school.programmers.co.kr/learn/courses/30/lessons/60057
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
주요 아이디어
- 몇 개 단위로 압축할 지 순회하기
- 제일 앞부터 정해진 길이만큼 잘라야 함
코드 구현 (Python 3)
더보기
def solution(s):
# 맨 처음에는 문자열 원래 길이 (압축 안됐을 때)
answer = len(s)
# 1~n-1 길이로 자르기
for length in range(1, len(s)):
comp_str = ''
word_dict = {}
# 문자열 맨 처음부터 순회하면서 키 등록
for idx in range(0, len(s), length):
new_str = s[idx:idx+length]
# 다른 문자열 나올 경우에는 comp_str에 추가하고 딕셔너리에서 키 삭제
if len(word_dict.keys()) == 0: # 맨 처음
word_dict[new_str] = 1
elif new_str not in word_dict:
key = list(word_dict.keys())[0]; value = word_dict[key]
if value != 1:
comp_str += str(value) + key
else:
comp_str += key
del word_dict[key] # 삭제
word_dict[new_str] = 1 # 새로 등록
else:
word_dict[new_str] += 1
# 남아있는 거 넣기
if len(word_dict.keys()) != 0:
key = list(word_dict.keys())[0]; value = word_dict[key]
if value != 1:
comp_str += str(value) + key
else:
comp_str += key
answer = min(answer, len(comp_str))
return answer
제출 결과
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 단속 카메라 (0) | 2024.06.25 |
---|---|
[LeetCode] Add Two numbers (0) | 2024.06.25 |
[프로그래머스] 거리두기 확인하기 (0) | 2024.05.21 |
[프로그래머스] 키패드 누르기 (0) | 2024.05.21 |
[프로그래머스] 폰켓몬 (0) | 2024.05.21 |