반응형
해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다.
문제설명
해당 문제는 프로그래머스에서 제공하므로 하단의 링크를 참조해서 문제을 읽어보자.
# 문제 링크: https://programmers.co.kr/learn/courses/30/lessons/60057
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문
programmers.co.kr
사고과정
- 압축 단위의 범위는 주어진 문자열 길이를 2로 나눈 몫(문자열 길이 // 2)까지인 것을 잘 설정함. 그리고 하나의 압축 단위마다 주어진 문자열의 range의 step 단위로 돌면서 앞,뒤 문자열이 같으면 계속 압축하고, 다른 문자열이면 그대로 이어 붙이는 과정을 수행
- 문제를 풀지 못했는데, 단위별로 압축하고 남은 문자열의 처리를 하는 것을 해결하지 못함. Python에서 리스트 슬라이싱을 할 때 주어진 길이보다 더 크게 한다고 한들 주어진 길이 끝까지만 출력하고 에러를 발생시키지 않는다. 또한 주어진 길이의 범위를 벗어난 인덱싱 슬라이싱을 주어도 빈 문자열 또는 리스트를 반환하고 에러를 발생시키지 않는다. 이 점을 평소에 알지 못해서 남아있는 문자열의 처리를 어떻게 할 줄 몰랐다..
- 그리고 if 문을 간결하게 한줄로 사용해서 코드 간결화하는 것도 인상적..
풀이(스스로 풀지 못함)
def solution(s):
answer = len(s)
# 압축 단위 주기 Loop
for step in range(1, len(s)//2 + 1):
prev = s[0:step]
count = 1
result = ''
for j in range(step, len(s), step):
after = s[j:j+step]
if prev == after:
count += 1
else:
result += str(count) + prev if count > 1 else prev
prev = after
count = 1
# 위 loop문 돌고 마지막 남은 문자열이 prev에 들어가 있는 상태
result += str(count) + prev if count > 1 else prev
answer = min(answer, len(result))
return answer
반응형
'알고리즘 삽질장' 카테고리의 다른 글
[이코테] 정렬 - 안테나 (0) | 2021.09.28 |
---|---|
[이코테] DFS - 연구소 (0) | 2021.09.27 |
[이코테] 그리디 - 문자열 뒤집기 (0) | 2021.09.26 |
[이코테] 최단경로 - 전보 (0) | 2021.09.26 |
[이코테] 최단경로 - 미래 도시 (0) | 2021.09.25 |