728x90
반응형
문자열 압축
- 프로그래머스 문제와 동일함
- 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/60057
풀이
처음 구조를 어떻게 잡아야 할까 고민이 크게 되었다.
일단 1~len(s)까지 단위로 잘라서 각자의 총 길이 최소값을 비교하여 min값에 저장하고 최종적으로 저장된 min 값을 제출한다는 개념을 잡았다.
다음으로는 남은 문자가 비교할 수 없이 짧은 경우와 비교가능한 경우로 나누고
각각을 n==1인경우와 그렇지 않은 경우로 나누어서 구현 하였다.
어려웠다기 보다 실수 했던 점은 first와 second에 문자열을 배정하는 부분이었는데 처음에는
fist = s[i:i+sept], second = [i+sept+1:i+sept+1+sept]로 배정했는데 생각해보니 [시작하는 부분, 끝나는 부분(-1)]까지였어서 fist = s[i:i+sept], second = [i+sept+:i+sept+sept]가 맞다는 걸 나중에 깨달았다. 그리고 break도 한번 놓쳤어서 그 부분도 제대로 기억해둬야 할 포인트 중 하나인 것같다!
코드
def solution(s):
answer = len(s)
result = 0
n = 1
for sept in range(1,len(s)):
result = 0
for i in range(0,len(s),sept):
#남은 문자가 비교할수 없이 짧은 경우
if (i+sept*2) > len(s):
result += len(s)-i
if n != 1:
result+= len(str(n))
n = 1
break
#남은 문자가 비교 가능한 경우
else:
first = s[i:(i+sept)]
second = s[(i+sept):(i+sept+sept)]
if first == second:
n += 1
else:
result += len(first)
if n != 1 :
result += len(str(n))
n = 1
answer = min(answer,result)
return answer
s = input()
print(solution(s))
728x90
반응형
'Algorithm > 이것이 취업을 위한 코딩테스트다' 카테고리의 다른 글
(기출 / 구현) 자물쇠와 열쇠 (0) | 2023.06.07 |
---|---|
(기출 / 구현) 문자열 재정렬 (0) | 2023.06.06 |
(기출 / 구현) 럭키 스트레이트 (0) | 2023.06.06 |
(실전/구현) 게임 개발 (0) | 2023.06.06 |
(실전/구현) 왕실의 나이트 (0) | 2023.05.30 |