728x90
📌 문제
https://programmers.co.kr/learn/courses/30/lessons/60057
📌 문제 접근 방법
- 처음엔 문자열 길이의 약수들로만 단위를 줬었는데, 테스트 케이스가 틀렸길래 꼭 나누어 떨어지지 않더라도 남은 문자열은 더해주면 된다고 문제에 적혀있어서 이 부분을 수정했다.
- 첫 번째 반복문에서 i는 1부터 len(s)-1까지를 순회한다. i가 문자열을 나누는 단위가 된다.
- 두 번째 반복문에서 j는 i부터 len(s)-1까지 i만큼 점프하며 순회한다.
그리고, 그 전의 단위문자와 비교해서 같다면 cnt를 +1해주고 다르다면 cnt와 단위문자를 temp에 저장하고 cnt는 초기화 시켜준다. (cnt가 1일 경우는 cnt는 생략한다.) - 반복문이 모두 끝나고 난 뒤, 남은 문자열을 temp에 저장해준다.
- 그리고 answer와 temp의 길이를 비교하여 더 작은 값으로 갱신시켜준다.
📌 코드
# 프로그래머스 문자열 압축
def solution(s):
answer = len(s)
for i in range(1, len(s)):
temp = ''
cnt = 1
for j in range(i, len(s), i):
if s[j-i:j] == s[j:j+i]:
cnt += 1
else:
if cnt != 1:
temp += str(cnt)
cnt = 1
temp += s[j-i:j]
if cnt != 1:
temp += str(cnt)
cnt = 1
temp += s[j:j+i]
# print(temp, i)
answer = min(answer, len(temp))
return answer
print(solution("abcabcdede"))
728x90
'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글
[PG/Python] 전력망을 둘로 나누기 (0) | 2021.11.14 |
---|---|
[PG/Python] 타겟 넘버 (0) | 2021.11.04 |
[PG/Python] 모의고사 (0) | 2021.08.21 |
[PG/Python] 가장 큰 수 (0) | 2021.08.18 |
[PG/Python] K번째수 (0) | 2021.08.16 |
댓글