study/알고리즘
[python] programmers - 문자열 압축(2020 KAKAO BLIND RECRUITMENT)
It's Hyeeun Time
2021. 9. 9. 01:02
오늘은 2020년 카카오 문제를 들고왔다.
이 문제를 잘못 이해하고 풀었다가
예제를 꼼꼼히 확인하고
다시 풀었는데
이번 기회를 통해
다시 한번 문제를 꼼꼼히 확인하는 것이
얼마나 중요한지 다시 한 번 느끼게 되었다.
https://programmers.co.kr/learn/courses/30/lessons/60057
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문
programmers.co.kr
1. 주요 POINT
내가 틀린 원인이었던 부분으로
문자열을 나눌때
반드시 앞에서부터 나눠야한다는 것이었다.
마지막 예제를 살펴보면
x / ababcdcd / ababcdcd 로 자르는 것은 불가능
이렇게 명시되어있다.
1. 실패 코드
실패 코드는
위의 경우가 가능하다고
판단하고 만든 코드로
아래와 같다.
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
|
def solution(s):
answer = len(s)
for i in range(1, len(s)//2+1):
ans = ''
j = 0
tmp = 1
tmp_s = ''
while j < len(s):
if s[j:j+i] == s[j+i:j+2*i]:
tmp += 1
tmp_s = s[j:j+i]
j = j+i
else:
if tmp != 1:
j += len(tmp_s) - 1
ans += str(tmp) + tmp_s
else:
ans += s[j]
tmp = 1
tmp_s = ''
j += 1
if len(ans) < answer:
answer = len(ans)
return answer
|
cs |
2. 성공 코드
미리 길이에 따라
리스트를 만들어 위의 문제를 해결해주었다.
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):
answer = len(s)
for i in range(1, len(s)//2+1):
j = 0
lst = []
while j < len(s):
lst.append(s[j:j+i])
j += i
tmp = 1
ans = ''
for j in range(len(lst)):
if j+1 < len(lst) and lst[j] == lst[j+1]:
tmp += 1
else:
if tmp != 1:
ans += str(tmp) + lst[j]
else:
ans += lst[j]
tmp = 1
if len(ans) < answer:
answer = len(ans)
return answer
|
cs |
마무리
요즘 알고리즘을 풀면서
*잘못된 부분이 있다면 댓글 부탁드리겠습니다!