[ 문제 ]
[출제 의도]
- 문자열을 활용
[ 문제 풀이 ]
문자열 길이가 N일 때, 분절 범위는 1부터 n/2입니다.
n/2를 넘어가게 되면 문자열을 줄일 수 없습니다.
문자열의 길이는 최대 1,000입니다. 따라서 완전 탐색을 해도 시간 초과가 나지 않습니다.
그래서 분절 범위마다 줄인 결괏값 중에서, 가장 짧은 길이를 찾았습니다.
주의할 점은 문자열 길이가 1이면 1을 반환합니다.
[ 정답 코드 ]
def solution(s):
result = len(s) + 1
for n in range(1, (len(s) // 2) + 1): # 분절 범위
cnt = 1
tmp = len(s)
check = True
for i in range(0, len(s) - n + 1, n): # 앞에서부터 분절
if i == 0:
pre = s[i:i+n]
continue
now = s[i:i+n]
if pre == now:
if check: # 연속으로 중복되는 문자열, 1개 남기기
check = False
tmp += 1
cnt += 1 # 연속 횟수
tmp -= n # 연속으로 중복되는 문자열 제거
print(cnt)
if cnt > 9 and cnt == int('1' + (len(str(cnt)) - 1) * '0'): # 연속 횟수, 두 자리 이상
tmp += 1
else: # 불연속
check = True
cnt = 1
pre = now
result = min(result, tmp)
return min(result, len(s))
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][2019 KAKAO BLIND RECRUITMENT][Python] 매칭 점수 (0) | 2022.03.28 |
---|---|
[프로그래머스][2020 KAKAO BLIND RECRUITMENT][Python] 괄호 변환 (0) | 2022.03.23 |
[프로그래머스][2021 KAKAO BLIND RECRUITMENT][Python] 합승 택시 요금 (0) | 2022.03.20 |
[프로그래머스][2021 KAKAO BLIND RECRUITMENT][Python] 메뉴 리뉴얼 (0) | 2022.03.05 |
[프로그래머스][2021 KAKAO BLIND RECRUITMENT][Python] 순위 검색 (0) | 2022.03.02 |