Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 한국의새
- 비둘기과
- 딱다구리과
- ADsP
- Python
- 생일문제
- 직박구리과
- keras
- 맑은소리 스피치학원
- 참새목
- 솔딱새과
- AI전략게임
- python3
- IBK기업은행 인턴
- 기러기목
- structured_array
- 한국의 새
- SimpleCraft
- 딥러닝공부
- 참새과
- django
- 오리과
- 가마우지과
- 비둘기목
- Birthday paradox
- AI역량평가
- 딥러닝 공부
- 흰날개해오라기
- 백로과
- 계수정렬
Archives
- Today
- Total
진박사의 일상
[프로그래머스] 20년 카카오 코테 - 문자열 압축 본문
문제 : 문자열을 N개 단위로 잘라 반복된 시퀀스와 그 반복 횟수로 나타내 줄이는 압축을 할 때 최대로 압축한 문자열의 길이는?
def solution(s):
answer = 0
if len(s) == 1:
return 1
half_l = len(s)//2 # 8 -> 4
for size in range(1,half_l+1): # 1-4 #split size
word = ""
count = 0
for start in range(0,len(s),size): # size=1일때 0-7, 2일때 0-6
now_seq = s[start:start+size] #현재 분할
next_seq = s[start+size:start+size*2] #다음 분할
before_seq = [] #이전 분할
if start-size >= 0:
before_seq = s[start-size:start]
#print(now_seq, next_seq, before_seq)
if now_seq == next_seq: # 같으면
count += 1
continue
else: #다르면
if before_seq and before_seq == now_seq: #이전 분할이 있고 현재랑 같으면
count += 1
word += str(count)+now_seq # count 수가 1의 자리 이상으로 나올 수 있다는 점이 포인트!
count = 0
else: #이전 분할이 없거나 현재랑 다르면
word += now_seq
continue
#print(word)
if answer == 0:
answer = len(word)
else:
answer = min(answer, len(word))
return answer
후기 : 반복횟수가 1의 자리수 이상으로 나오는 경우를 고려하지 못해 엄청 해멨다... 역시 이런 하나하나가 경험의 차이인듯
'프로그래밍 > 코딩테스트 공부' 카테고리의 다른 글
[프로그래머스] 동적프로그래밍 문제 - 정수 삼각형 (0) | 2021.09.10 |
---|---|
[프로그래머스] DFS 문제 - 타겟 넘버 (0) | 2021.09.10 |
[프로그래머스] 19 카카오 코테 - 오픈채팅방 (0) | 2021.09.08 |
[프로그래머스] 정렬 문제 - k 번째 수 (0) | 2021.09.08 |
[프로그래머스] 완전 탐색 문제 - 모의 고사 (0) | 2021.09.08 |