문제

문제

https://programmers.co.kr/learn/courses/30/lessons/60057

 

코딩테스트 연습 - 문자열 압축

데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자

programmers.co.kr

 

처음 작성한 코드

def solution(s):
    mini = len(s)
    s = [''.join(list(i)) for i in s]
    for i in range(1,len(s)+1):
        ans = ''
        cnt = 1
        for idx in range(0,len(s),i):
            now = ''.join(s[idx:idx+i])
            if s[idx:idx+i]==s[idx+i:idx+i+i]:
                cnt += 1
                continue
            else:
                if cnt > 1:
                    ans += str(cnt)
                    cnt = 1
                ans += now
        mini = min(mini,len(ans))
    return mini
  1. 문자열을 1개 단위로 자르는 거 부터해서 len(s)개 단위까지 자르는 포문을 돌면서 진행했다.
  2. 현재 문자열과 다음 문자열이 같으면 cnt를 증가시키고
  3. 다를 시, cnt+반복된문자열 이렇게 새로운 문자열에 저장시켜놓고 그 길이를 지금까지 구해둔 mini와 비교후 더 작은 값을 mini에 넣었다.

 

깨달은 점

  • 문제를 풀 때, 처음부터 모든 경우를 풀 수 있는 로직을 짜지말고 최소한 단위를 작게하여 로직을 짜고 그걸 확장해나가는 방식으로 짜면 훨씬 수월하게 풀릴 때가 있는 것 같다.
  • level 2 치고 쉬웠던 것 같다!

'Programmers' 카테고리의 다른 글

[프로그래머스] 오픈채팅방  (0) 2021.01.19
[프로그래머스] 괄호 변환  (0) 2021.01.19
[프로그래머스] 프렌즈4블록  (0) 2021.01.17
[프로그래머스] 캐시  (0) 2021.01.15
[프로그래머스] 키패드 누르기  (0) 2021.01.14