Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @BeforeAll
- @BeforeEach
- @Builder
- @Entity
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Query
- @Table
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- ApplicationEvent
- assertThat
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
Archives
- Today
- Total
기록
프로그래머스_python_문자열압축 본문
문제
https://programmers.co.kr/learn/courses/30/lessons/60057
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문
programmers.co.kr
풀이
문자열이 "a"처럼 1자리일 때를 고려해야 한다.
1. 문자열을 주어진 길이(unit)으로 자른다.
2. 잘린 문자열당 연속하여 출현하는 횟수를 구한다.
3. 연속 출연 횟수가 1인 문자열의 개수를 센다. (1을 표현하지 않으므로)
4. 압축된 문자열의 길이에서 1의 개수를 뺀다.
5. unit의 크기를 1에서 문자열의 절반까지 늘려가면서 1~4를 반복한다.
코드
def solution(s):
ansList = [len(s)]
for unit in range(1, len(s)//2 + 1) :
# 자르기
mstring = [s[i:i+unit] for i in range(0 ,len(s), unit)]
# 중복된 것 개수 세기
countList = [mstring[0], 1]
for i in range(1, len(mstring)) :
if mstring[i] != mstring[i-1] : countList.extend([mstring[i], 1])
else : countList[-1]+=1
# 1 개수 세기
count_one = countList.count(1)
# 압축된 문자열의 길이
ans = len("".join(map(str, countList))) - count_one
ansList.append(ans)
return min(ansList)
'코딩테스트 > python' 카테고리의 다른 글
백준_9527_1의 개수 세기 (0) | 2022.02.26 |
---|---|
프로그래머스_python_오픈채팅방 (0) | 2022.02.23 |
프로그래머스_python_메뉴 리뉴얼 (0) | 2022.02.09 |
프로그래머스_python_파괴되지 않은 건물 (0) | 2022.02.08 |
프로그래머스_python_[1차] 추석 트래픽 (0) | 2022.02.07 |
Comments