티스토리 뷰
반응형
문제
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자
programmers.co.kr
풀이
압축후 길이를 체크하는 함수(check)를 만들고, 메인(solution) 함수에서는 문자열의 길이의 반만큼 포문을 돌면서 체크 함수를 호출해 그 중 가장 작은 값을 최종적으로 리턴해줬다.
# 메인 함수
def solution(s):
# 최소값을 일단 압축전 문자열의 길이로 설정
min = len(s)
# 1 ~ 압축 전 문자열의 길이의 반까지 포문으로 돌며 check함수 호출,
# 압축된 문자열의 길이 리턴받아 최소값 갱신
for i in range(1, int(len(s) // 2) + 1):
answer = check(i, s)
if answer < min:
min = answer
return min
# 문자열 압축 후 길이 리턴하는 함수
# length: 잘라서 확인할 단위 길이 / string: 오리지날 문자열
def check(length, string):
# count: 반복된 횟수 / result: 압축한 문자열
count = 1
result = ""
# 문자열의 0번부터 최종길이-length 전까지
for i in range(0, len(string) - length, length):
# 현재 슬라이싱한 문자열과 다음 슬라이싱할 문자열이 같은 경우
if string[i:i + length] == string[i + length:i + length + length]:
count += 1
# 마지막 애인지 확인 (마지막애면 방금까지 처리한 문자열이랑 갯수 붙이기)
if i + length >= len(string) - length:
result += str(count) + string[i:i + length]
else:
if count != 1:
result += str(count) + string[i:i + length]
count = 1
# 1은 생략
else:
result += string[i:i + length]
# 마지막 애인지 확인 (마지막애면 남은애들 끝에 다 붙여주기)
if i + length >= len(string) - length:
result += string[i + length:]
# 압축한 문자열의 길이 리턴
return len(result)
새로 알게된 사실
s = "abc"일때 s[2:5]같이 범위에 벗어나게 값을 넣어도 에러가 나지 않는다.
s[-1:3] -> c
s[-1:0] -> 빈값
위의 코드를 짤때 이걸 몰라서 포문으로 범위 처리를 해줬는데
더 간단하게 짤 수 있었을것같다
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 투포인터 알고리즘 파이썬
- 코틀린 리스트뷰
- 카카오 기출
- 백준
- kotlin fragment
- 프로그래머스
- 백준 2003
- counting sort
- Kotlin
- 안드로이드 키해시
- 파이썬 최대공약수
- 안드로이드 카카오톡으로 로그인
- 데이터바인딩 뷰바인딩 차이
- flutter simultor
- 코틀린 바텀네비게이션
- 코틀린 데이터바인딩
- 안드로이드
- 코틀린 뷰페이저
- 코틀린
- 카카오톡으로 로그인 오류
- TextFormField keyboard
- 백준 1644
- 시뮬레이터 키보드
- 투포인터 알고리즘
- 백준알고리즘
- 백준 1806
- 코틀린 뷰바인딩
- 전화번호목록 파이썬
- 카카오 키해시
- 소수 구하기 파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함