문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/60057
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현해서 더 짧은 문자열로 줄이려고 한다. 압축할 문자열 s가 매개변수로 주어질 때, 1개 이상 단위로 문자열을 잘라 압축하여 표현한 문자열 중 가장 짧은 것의 길이를 return 하도록 함수를 작성.
제한 사항
- s의 길이는 1 이상 1,000 이하입니다.
- s는 알파벳 소문자로만 이루어져 있습니다.
풀이
문자열 길이의 반 이상의 단위는 문자열을 압축할 수 없으므로 제외하여, 문제를 접근했다.
✅ Code - 성공
def solution(s):
if len(s) == 1:
return 1
answer = 1000
for unit in range(1, len(s) // 2 + 1):
spt_str = list(s[i : i + unit] for i in range(0, len(s), unit))
press_str = ""
cnt = 1
for i in range(len(spt_str) - 1):
if spt_str[i] == spt_str[i + 1]:
cnt += 1
else:
if cnt > 1:
press_str += str(cnt) + spt_str[i]
else:
press_str += spt_str[i]
cnt = 1
# 마지막 문자열 처리
if cnt > 1:
press_str += str(cnt) + spt_str[-1]
else:
press_str += spt_str[-1]
answer = min(answer, len(press_str))
return answer
'알고리즘 문제 > 프로그래머스_Lv2 도장깨기' 카테고리의 다른 글
[프로그래머스] 멀쩡한 사각형 (0) | 2024.06.17 |
---|---|
[프로그래머스] 괄호 변환 (Python) (1) | 2024.06.16 |
[프로그래머스] 방문 길이 (Python) (1) | 2024.06.10 |
[프로그래머스] 스킬트리 (Python) (0) | 2024.06.08 |
[프로그래머스] 타겟 넘버 (Python) (1) | 2024.06.04 |