어디까지 갈 수 있을까?
[구현] 프로그래머스 문자열 압축 본문
문제링크
programmers.co.kr/learn/courses/30/lessons/60057
카카오 문제는 예제외에 다른 테스트케이스들도 많이 생각하고 돌려야하는 것 같다
[답코드]
시도
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
def solution(s):
#시뮬레이션 문제?
answer = len(s)
if len(s)==1:
return 1
#반복 문자열 갯수
for i in range(1, (len(s) // 2)+1):
simul_answer=0
#인덱스
re=0 #반복 횟수
for j in range(0, len(s)-i, i):
if s[j:j+i]==s[j+i:j+2*i]:
if re == 0: #같으면 #반복이 없었으면
simul_answer += len(s[j:j + i]) + 1
re+=1
if str(re+1).rstrip('0')=='1' and re!=1:
simul_answer+=1
else:
if re==0:
simul_answer += len(s[j:j + i])
re = 0
if re==0:
simul_answer += len(s[j + i:])
if answer>simul_answer:
answer=simul_answer
return answer
|
cs |
100 점이 나오긴 하는데,
반복이 10, 100, 1000 이상씩 되는 테스트케이스를 생각하지 않고 코딩하다보니
그 처리를 해주기 위해 코드가 길어졌다.
다음에는 테스트케이스 여러개 생각해보고 그에 맞춰 코딩해보자.
다른 분 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
def solution(s):
length = []
result = ""
if len(s) == 1:
return 1
for cut in range(1, len(s) // 2 + 1):
count = 1
tempStr = s[:cut]
for i in range(cut, len(s), cut):
if s[i:i+cut] == tempStr:
count += 1
else:
if count == 1:
count = ""
result += str(count) + tempStr
tempStr = s[i:i+cut]
count = 1
if count == 1:
count = ""
result += str(count) + tempStr
length.append(len(result))
result = ""
return min(length)
|
cs |
2달 후 다시 푼 코드
def solution(s):
answer=0
n = len(s)
st=[]
for i in range(1, (n//2)+1): #압축 갯수
final_s=''
mid_s=''
num=1
for j in range(0, n, i): #시작 인덱스
if s[j:j+i]==s[j+i:j+2*i]: #압축이 될 때
if len(mid_s)==0:
mid_s=s[j:j+i]
num+=1
else:
if num!=1: #압축 된 값을 문자열에 더할 때
final_s+=str(num)+mid_s
mid_s=''
num=1
else: #그냥 문자열에 더할 때
final_s+=s[j:j+i]
st.append(final_s)
for s in st:
if len(s)<n:
n=len(s)
answer=n
return answer
[생각]
문자열의 반복이 많아서 예제처럼 결과값을 직접 만드는 방식이 더 좋은 거 같다.
if 문의 사용을 줄이고,
동일한 수가 반복되면 변수를 사용해서 더 가독성이 좋은 코드를 만들어야겠다.
테스트케이스
aaaaaaaaaabbbbbbbbbb ->10a10b 이므로 result 6
a -> 1 result 1
aaaaa -> 5a 이므로 result 2
aaaaaaaaaa -> 10a 이므로 result 3 이 나와야 된다
length가 1일 때 처리, 반복값이 10, 100, 1000 ... 일 때의 처리를 주의하며 코딩해야된다
728x90
'알고리즘 > 문제' 카테고리의 다른 글
[브루트포스] 백준 1038 감소하는 수 (0) | 2021.03.18 |
---|---|
[구현] 백준 3190 뱀 (0) | 2021.03.11 |
[그리디] 프로그래머스 무지의 먹방 라이브 (0) | 2021.03.04 |
[Union-Find] 백준 10775 공항 (0) | 2021.03.02 |
[플로이드 워셜] 백준 2224 명제 증명 (0) | 2021.02.27 |
Comments