문제
바로가기
중복되는 문자열을 압축해서 압축 결과가 가장 작은 길이를 출력하라.
조건 1] 앞에서부터 일정 단위로 자른다.
조건 2] 입력되는 문자열의 길이는 1이상 1,000이하이다.
힌트
길이가 1,000이기 때문에 완전 탐색을 수행할 수 있다.
문자열의 길이를 기준으로 가장 큰 반복문의 틀을 만든다.
문자열의 길이는 range(s,e,step)을 이용해, 문자열의 특정 단위를 탐색할 수 있다.
import sys
sys.stdin = open('./구현/input.txt','rt')
s = str(input())
short = len(s)
for step in range(1,len(s)//2+1): # i는 자를 문자열의 길이
# 0 단위, 1단위, 2단위,
initial = s[:step]
result = ''
count = 1
for j in range(step,len(s),step): # 5 10 15
if initial == s[j:j+step]:
count += 1
else:
result += str(count) + initial if count>1 else initial
initial = s[j:j+step]
count = 1
print(result)
short = min(short, len(result))
result += str(count)+initial if count >1 else initial
print(result)
리뷰
아예 손도 못대던 문제인데, 이제 기초적인 틀은 스스로 짤 수 있게 됐다는 점이 뿌듯하다.
다만 range로 단위를 건너뛸 수 있다는 데까지 생각이 다다르지 못한 게 아쉽다.
그럼에도 if문과 나머지 변수들을 조작하는 부분이 아직 어려웠기에 이 문제로 구현 연습을 반복적으로 해봐야겠다.
+ 22.07.01 추가
다시 푸는 데 전혀 못풀고, 감을 못잡았다. 답을 봐도 도저히 이해가 안됐는데, 알고보니 문제를 잘못 이해한 것이었다.
"어떤 단위로 잘랐을 때 가장 짧게 압축될까??" 가 관건이었는데, 나는 각 문자를 압축하는 조합을 생각하고 있었네.
다시 생각해보니 그냥 후자였어도 답코드랑 안꼬으면 이렇게까지 어렵게 안풀었을 거 같은데..ㅋ ㅋㅎㅎ..
역시 단순히 문제를 많이 푸는 것보다 복습을 주기적으로 해줘야겠다.
문제의 핵심질문을 한 문장으로 줄이는 습관을 들여야겠다. + 테스트 케이스 추가하는 연습도 필요!
'⚡️algorithm' 카테고리의 다른 글
[medium 번역, algorithm] 개발자가 필수로 알아야할 6가지 알고리즘 (0) | 2022.09.14 |
---|---|
[프로그래머스] dictionary 한줄로 구성하기 (0) | 2022.06.23 |
[완전탐색, 브루트포스] 백준 1065. 한수 (0) | 2022.06.06 |
[문자열] 프로그래머스 lv2. 방금그곡 (0) | 2022.05.31 |
[조합, 자료구조] 프로그래머스 lv2. 후보키 (0) | 2022.05.31 |