어려웠다!!!!
# 복습
1회 | 22-07-10 |
2회 | |
3회 | |
4회 | |
5회 |
# 오답
def solution(s):
res=list()
for j in range(1, len(s)//2+1):
cnt=1
ss=""
for i in range(0,len(s)-1,j):
if s[i:i+j]==s[i+j:i+2*j]:
cnt+=1
else:
if cnt==1:
ss+=s[i:i+j]
else:
ss+=str(cnt)+s[i:i+j]
cnt=1
if j==1: #??
ss+=s[len(s)-1]
#print(ss)
res.append(ss)
res_cnt=list()
for x in res:
res_cnt.append(len(x))
#print(res)
#print(min(res_cnt))
return min(res_cnt)
print(solution("aabbaccc"))
print(solution("ababcdcdababcdcd"))
print(solution("abcabcdede"))
print(solution("abcabcabcabcdededededede"))
print(solution("xababcdcdababcdcd"))
교훈
1. 가장 최소의 값을 찾을 때 굳이 list에 넣어서 안 찾아도 된다
if answer>len(ss):
answer=len(ss)
처럼 answer 값이 새로 구한 len(ss) 값보다 크다면 answer를 update하자
2. temp 변수 만들기
한 번에 바로 직관적으로 처리하려 하지 말고 (복잡해질 가능성이 크다) temp처럼 변수를 만들어서 차근차근 이용하자,,
변수를 만드면 나중에 값을 변화시킬 수도 있고 더 한 눈에 들어온다
3. 극단적인 값 처리
여기서는 1일 때를 처리 못하면 런타임 에러(5번 case)가 떴다
# 정답
def solution(s):
res=list() # 문자열 길이를 저장할 list
# 문자열 길이가 1일 때 처리
if len(s)==1:
return 1
for j in range(1, len(s)//2+1): #j는 slice 단위
cnt=1
ss=""
temp=""
for i in range(0,len(s)+1,j):
if s[i:i+j]==temp:
cnt+=1
else:
if cnt==1:
ss+=temp
else:
ss+=str(cnt)+temp
cnt=1
temp=s[i:i+j]
# 뒤쪽 문자열 처리
if cnt==1:
ss+=temp
else:
ss+=str(cnt)+temp
res.append(len(ss))
# 가장 짧은 것의 길이 return
return min(res)
'Python > 알고리즘' 카테고리의 다른 글
정올 1291 (0) | 2022.07.26 |
---|---|
42888 오픈채팅방 / 오류 : TypeError: 'dict' object is not callable (0) | 2022.07.16 |
[백준] 11478 / 18247 (0) | 2022.07.06 |
[백준] 1225 이상한 곱셈 (0) | 2022.07.06 |
[백준] 5639 이진 검색 트리 (미완) (0) | 2022.07.03 |