문제설명 (링크 참조)
문자열의 반복되는 부분을 겹쳐서 제일 짧은 문자열을 만들어 리턴하라!
풀이
입력받은 문자열을 1~제일 크게 나눌 수 있을 때까지 나눠서 겹치는지 확인하는 문제
결국 최대 두개가 겹치는 건 길이의 1/2일때니깐 1~len(s//2) 까지 확인하면 된다.
1~len(s//2)까지 매 시행횟수에 초기값 설정.
초기값
- arr=””
- count=1
- cur=s[0:i]
- cur은 매 시행의 크기만큼 첫번째 문자열.
- count는 현재 몇번 반복되었는지 확인
반복문을 돌면서 다음 조건을 통해 arr에 차례차례 담는다.
- cur과 같은 크기만큼 다음 문자열을 비교
- 같으면 count+=1 해주고 넘어감
- 다르면 count가 1이면 겹치는게 하나도 없는것이므로로 그냥 cur만 arr에 더해줌
다르고 count가 1이 아니면 여러번 겹친것이므로 count+cur로 문자열에 더해줌
코드
def solution(s):
answer=len(s)
for i in range(1,len(s)//2+1):
arr = ''
count=1
cur=s[0:i]
for j in range(i,len(s),i):
if(cur==s[j:j+i]):
count+=1
else:
if(count==1):
arr+=cur
else:
arr+=str(count)+cur
count=1
cur=s[j:j+i]
if(count==1):
arr+=cur
else:
arr+=str(count)+cur
if(answer>len(arr)):
answer=len(arr)
return answer
특이사항
- 처음에 무조건 같은 크기로 나누는지 몰라서 엄청 어렵게 생각함.
(1 + 3 + 3)이런식으로 나눠도 되는줄 알고 원래 난이도보다 훨씬 올려서 생각했다. - 문제를 잘 읽자...
'알고리즘' 카테고리의 다른 글
[백준] 20006 랭킬전 대기열 python (0) | 2024.01.19 |
---|---|
[프로그래머스] 방문 길이 python (0) | 2024.01.18 |
[프로그래머스] 호텔 대실 python (0) | 2024.01.17 |
[프로그래머스] 튜플 Python (0) | 2023.10.02 |
[프로그래머스] 양궁 대회 Python (0) | 2023.10.02 |