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 |
Tags
- 스택
- 프로그래머스lv2
- 주피터
- 연산자오버로딩
- 11382번
- C++
- 포인터
- 점프투파이썬
- c++코딩테스트합격자되기
- 상속
- OOP
- 기본클래스
- list comprehension
- 참조자
- 얕은복사
- 백준
- 데이터사이언스
- python
- 코드잇
- OpenCV
- 코딩테스트
- 동적바인딩
- 멤버함수로구현
- 인프런
- 다형성
- 제네릭프로그래밍
- 람다식
- STL
- 깊은복사
- 유도클래스
Archives
- Today
- Total
WjExplor Story
문자열 압축 게임 본문
문제 설명
- 주어진 문자열에서 연속해서 같은 문자가 반복되는 경우, 그 문자와 반복 횟수를 이용해 새로운 형태로 문자열을 압축합니다. 예를 들어, "aabcccccaaa" 문자열은 "a2b1c5a3"로 압축될 수 있습니다.
- 함수 설명
compress_string(s: str) -> str:- s: 압축하고자 하는 문자열입니다.
- 입출력 예시
- 입력1:
"aaabbaaa"- 출력1:
"a3b2a3"- 입력2:
"aabcccccaaa"- 출력2:
"a2b1c5a3"
# 문제
def compress_string(s):
i, cnt = 0, 1
my_str = ""
my_list = list(s)
for i in range(0, len(my_list) - 1):
if len(my_list) < 0:
print("문자열 입력을 잘못하였습니다")
return
elif my_list[i] == my_list[i + 1]:
cnt += 1
elif my_list[i] != my_list[i + 1]:
my_str += str(my_list[i]) + str(cnt)
cnt = 1
i += 1
my_str += s[-1] + str(cnt)
return print(my_str)
파이썬스럽게 코드 작성
itertools.groupby 활용
groupby는 이름 그대로 연속된 동일한 요소들을 그룹으로 묶어주는 아주 편리한 도구입니다.
동작원리
groupby("aabcccccaaa") 를 실행하면, 아래와 같이 그룹을 만들어줍니다.
- 첫번째 그룹 : 'a' , ('a', 'a')
- 두번째 그룹 : 'b' , ('b',)
- 세번째 그룹 : 'c' , ('c','c','c','c','c')
- 네번쨰 그룹 : 'a' , ('a','a','a')
이 그룹에서 키(key) 와 그룹(group)을 얻을 수 있다.
우리는 그룹의 길이를 세기만 하면 된다.
from itertools import groupby
def compress_string(s):
if not s: # 입력이 비어있는 경우 처리
return ""
result_parts = []
# 1. groupby 로 연속된 문자를 그룹핑 합니다.
for key, group in groupby(s):
# 2. Key는 그룹의 문자('a'), group 은 해당 문자의 이터레이터입니다.
# list(group) 으로 실제 그룹을 만들고 len() 으로 길이를 셉니다.
count = len(list(group))
# 3. f-string 을 이용해 "문자+개수" 형태의 문자열을 만듭니다.
result_parts.append(f"{key}{count}")
# 4. 만들어진 조각들(["a2","b1","c5","a3"]) 을 하나의 문자열로 합칩니다.
return print("".join(result_parts))
compress_string("aabcccccaaa") # a2b1c5a3
리스트 컴프리헨션으로 한 줄에 표현하기
from itertools import groupby
def compress_string(s):
if not s:
return ""
# 리스트 컴프리헨션
return print("".join([f"{key}{len(list(group))}" for key, group in groupby(s)]))
compress_string("aabcccccaaa") # a2b1c5a3'AI 엔지니어 부트캠프 > 파이썬 데이터 분석 기초와 머신 러닝 기초' 카테고리의 다른 글
| 기초 통계와 데이터 시각화 (2) | 2025.10.01 |
|---|---|
| 데이터 사이언스 Toolkit (0) | 2025.09.30 |
| 2025.09.26(화) - 1주 2일차 강의 복습 (3) - 객체와 클래스 (0) | 2025.09.26 |
| 단어장 만들기 (0) | 2025.09.26 |
| 숫자 맞히기 게임 (0) | 2025.09.26 |