문제설명
제한사항
입출력 예
로직설명
1. 앞 문자열이랑 같은 길이의 문자열이 같은지 확인
2. 단위로 자를 때마다 새로운 word문자열에 넣어서 값 비교하기
3. 각 알파벳마다 하나씩 늘려갈 때 cnt += 1해주고(word에 추가되었다면 cnt=1로 초기화)
4. cnt = 1이면 문자만 넣고, cnt != 1이면 숫자를 문자화하고 숫자랑, 문자 둘다 넣어주기
5. 앞 문자열을 다음 문자열로 바꿔줘서 계속 진행하면서 확인할 수 있도록!
코드
def solution(s):
if len(s) == 1:
return 1
answer = 9999999999999999999999999999999
for i in range(1, len(s) // 2 + 1):
cnt = 1
word = ''
front = s[:i] # 문자열은 제일 앞부터 정해진 길이만큼 잘라야 한다!
for j in range(i, len(s) + i, i):
back = s[j:j + i]
if front == back:
cnt += 1
else:
if cnt == 1:
word += front
else:
word += str(cnt)
word += front
cnt = 1
front = s[j:j + i]
temp = len(word)
if answer > temp:
answer = temp
return answer
주의해야하는 부분
1. s[j:j+1] -> s[j:j+i] : 이렇게 되어야 j가 i만큼 띄어서 진행하는데, 다음 j전까지 값을 가질 수 있다.
: 문자열이 1개 단위로 잘릴 때는 상관없지만, 2개 이상이면 나오지 않음
2. for i in range(1, len(s) // 2 + 1) : 굳이 len(s)까지 할 필요가 없다.
ex. abcabc -> front='abc'이면 뒷부분은 abc가 될 것!
3. for j in range(i, len(s) + i, i) : len(s) + i 하는 이유
'알고리즘' 카테고리의 다른 글
[baekjoon] 7576. 토마토 (0) | 2020.06.29 |
---|---|
[programmers] 크레인 인형뽑기 게임 (0) | 2020.06.27 |
[baekjoon] 2468. 안전 영역 (0) | 2020.06.25 |
[baekjoon] 2667. 단지 내 수 세기 (0) | 2020.06.25 |
[programmers] 괄호 변환 (0) | 2020.06.25 |