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 | 29 | 30 | 31 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @GeneratedValue
- @GenericGenerator
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- ApplicationEvent
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
- Callback
- case when
- CCW
- chat GPT
- CICD
- Collections
- Combination
- combinations
Archives
- Today
- Total
기록
프로그래머스_python_문자열압축 본문
문제
https://programmers.co.kr/learn/courses/30/lessons/60057
풀이
문자열이 "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