문자열 압축
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 내 풀이 -
- 2,5,20 fail
- 테스트 5
- 문자열 길이가 1인경우
- 테스트 2,20
- 맨마지막에서 다를경우 계산 에러
def count(num):
#개수를 센 수의 길이 : 1~9: 1 / 10~99: 2...
if num==0:
same=0
elif num<10:
same=1
elif num<100:
same=2
elif num<1000:
same=3
return same
def solution(s):
answer=1001
for i in range(1,(len((s))//2)+1):
ls=""
cnt=0
result=0
for j in range(0,len(s),i):
if j==0:
ls=s[j:j+i]
continue
if ls==s[j:j+i]:
cnt+=1
if len(s[j:])==i: #마지막에 값이 같을 경우
same=count(cnt)
result+=same
result+=i
break
continue
#개수를 센 수의 길이 : 1~9: 1 / 10~99: 2...
same=count(cnt)
#앞의 값들 개수
result+=same
result+=i
cnt=0
if len(s[j:])==i: #다음이 마지막인데 앞과 다를 경우
result+=len(s[j:])
break
ls=s[j:j+i]
if len(s[j:])<i:
result+=len(s[j:])
answer=min(answer, result)
return answer

- 내 풀이
def count(num):
#개수를 센 수의 길이 : 1~9: 1 / 10~99: 2...
if num<=1:
same=0
elif num<10:
same=1
elif num<100:
same=2
elif num<1000:
same=3
return same
def solution(s):
answer=1005
if len(s)<=1:
return len(s)
for i in range(1,(len((s))//2)+1):
ls=""
cnt=1
result=0
for j in range(0,len(s),i):
if j==0:
ls=s[j:j+i]
continue
if ls==s[j:j+i]:
cnt+=1
if len(s[j:])==i: #마지막에 값이 같을 경우
same=count(cnt)
result+=same
result+=i
break
continue
#값이 다른경우
same=count(cnt)
#앞의 값들 개수
result+=same
result+=i
cnt=1
ls=s[j:j+i]
if len(s[j:])<=i: #값이 다른데 마지막일경우
result+=len(s[j:])
continue
answer=min(answer, result)
return answer
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][queue] 두 큐 합 같게 만들기 (1) | 2023.10.15 |
|---|---|
| [프로그래머스] [2019 KAKAO BLIND RECRUITMENT] 실패율 (0) | 2023.02.25 |
| [프로그래머스] [2019 카카오 개발자 겨울 인턴십] 튜플 (0) | 2023.02.01 |
| [프로그래머스] 귤고르기 (0) | 2023.01.28 |
| [프로그래머스] [Level 2] 짝지어 제거하기 (0) | 2023.01.20 |