이번에 이것이 코딩 테스트에서 문자열 압축 문제를 풀었고 해당 문제는 프로그래머스의 문제였다.
https://programmers.co.kr/learn/courses/30/lessons/60057
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문
programmers.co.kr
해당 문제를 거의다 풀어갈 때, 나머지를 어떻게 더할 것인가에 대한 고민이 생겼다.
고민을 하던중 알게된 것이 아래의 코드이다.
s = 'abcdefg'
print(s[4:100])
결과
efg
해당 결과를 보기전까진 [:] 에서 오른쪽 숫자는 문자열 길이를 초과해서는 안될 것이라는 생각이 있었는데 넘어가도 최대 값 이상 안넘어가며 오류또한 나타나지 않는 결과를 얻었다.
다시말해, 값이 초과하여도 상관이 없기 때문에 for문을 끝까지 돌려도 된다는 것이다.
아래 코드는 이코테 답안이다.
def solution(s):
answer = len(s)
# 1개 단위(step)부터 압축 단위를 늘려가며 확인
for step in range(1, len(s) // 2 + 1):
compressed = ""
prev = s[0:step] # 앞에서부터 step만큼의 문자열 추출
count = 1
# 단위(step) 크기만큼 증가시키며 이전 문자열과 비교
for j in range(step, len(s), step):
# 이전 상태와 동일하다면 압축 횟수(count) 증가
if prev == s[j:j + step]:
count += 1
# 다른 문자열이 나왔다면(더 이상 압축하지 못하는 경우라면)
else:
compressed += str(count) + prev if count >= 2 else prev
prev = s[j:j + step] # 다시 상태 초기화
count = 1
# 남아 있는 문자열에 대해서 처리
compressed += str(count) + prev if count >= 2 else prev
# 만들어지는 압축 문자열이 가장 짧은 것이 정답
answer = min(answer, len(compressed))
return answer
'알고리즘' 카테고리의 다른 글
2차원 배열 정렬을 배우기 좋은 APC는 왜 서브태스크 대회가 되었을까? (0) | 2022.01.13 |
---|---|
백준 1920번 수 찾기 (0) | 2022.01.12 |
[이코테] 문자열 재정렬 (0) | 2022.01.04 |
볼링공 고르기[이코테] 그리디 (0) | 2022.01.03 |
이것이 코딩 테스트이다 - 모험가 길드 (0) | 2022.01.03 |