반응형
2020 KAKAO BLIND RECRUITMENT 1차 코딩테스트
1번 - [문자열 압축]
문제 해설
주어진 문자열 s를 1개부터 n//2개까지 쪼개면서, 각각의 경우 압축된 글자의 수를 확인한다.
잘린 문자열을 spl 리스트에 저장하고, spl을 순회하며 앞의 문자열(before)과 현재 문자열(c)를 비교한다.
앞의 문자열과 현재 문자열이 같으면 카운팅을 하고, 다를 경우 cnt+앞의문자열을 출력해준 후 cnt를 1로 초기화한다.
이렇게 해서 압축된 문자열의 length를 구하고 최소값과 비교한다.
파이썬(Python3) 코드
def solution(s):
length = len(s)
answer = 9999999
# 문자열의 길이가 1인 경우 그 문자열 그대로 반환되므로 답은 1이 됩니다.
if length == 1:
answer = 1
else:
for i in range(1, length // 2 + 1):
tmp = s
'''
문자열 split하기
문자열을 1개부터 length//2개까지 split을 합니다.
잘린 문자열은 spl에 저장됩니다.
'''
begin = 0; end = begin + i
spl = []
while tmp:
spl.append(tmp[begin:end])
tmp = tmp[end:]
'''
잘린 문자열들을 순회합니다.
앞의 문자열과 같으면 카운팅을 해주고
다르면 카운팅+앞의문자열을 출력해줍니다.
'''
newstr = ""
before = spl[0]
cnt = 1
for idx, c in enumerate(spl):
spl_length = len(spl)
if idx:
if c == before:
cnt += 1
if idx == spl_length - 1:
newstr += (str(cnt) + before)
else:
if cnt > 1:
newstr += (str(cnt) + before)
if idx == (spl_length - 1):
newstr += c
else:
newstr += before
if idx == (spl_length - 1):
newstr += c
cnt = 1
before = c
# 새로 생긴 문자열이 최소값일 경우 answer를 갱신해줍니다.
new_str_length = len(newstr)
if new_str_length < answer:
answer = new_str_length
return answer
s = "aaaaa"
print(solution(s))
반응형
'DEVLOG > Algorithms' 카테고리의 다른 글
[BOJ 10828] 스택 - 파이썬 풀이 (0) | 2019.09.09 |
---|---|
[2020 KAKAO 코딩테스트 1차] 4번 - 와일드카드 (4) | 2019.09.08 |
[2020 카카오 코딩테스트] 문제 및 후기/예상 커트라인 (1) | 2019.09.07 |
[BOJ 1697] 숨바꼭질 파이썬(Python) 풀이 (0) | 2019.09.04 |
[BOJ 9095] 1, 2, 3 더하기 파이썬(Python) 풀이 (0) | 2019.09.04 |
댓글