프로그래머스 코딩테스트 고득점 Kit의 문제입니다.
https://programmers.co.kr/learn/challenges?tab=algorithm_practice_kit
문제
https://programmers.co.kr/learn/courses/30/lessons/60057
내가 작성한 코드
def solution(s):
answer = len(s)
for i in range(1, len(s) // 2 + 1):
n = len(s)
words = []
for start in range(0,len(s),i):
words.append(s[start:start+i])
cnt = 1
for a, b in zip(words, words[1:]):
if a == b:
cnt += 1
elif cnt > 1:
n = n - ((cnt-1) * i) + len(str(cnt))
cnt = 1
else:
cnt = 1
if cnt > 1:
n = n - ((cnt-1) * i) + len(str(cnt))
answer = min(answer, n)
return answer
- 1부터 전체 길이의 절반까지 나누는 횟수 지정하여, 자른 문자열들을 words에 append
- words를 인접한 n-1개 비교
- 같을 때까지 cnt 증가
- 다르면 같은 개수를 str로 바꾸고 그 length만큼 +
다른 사람이 작성한 코드
def compress(text, tok_len):
words = [text[i:i+tok_len] for i in range(0, len(text), tok_len)]
res = []
cur_word = words[0]
cur_cnt = 1
for a, b in zip(words, words[1:] + ['']):
if a == b:
cur_cnt += 1
else:
res.append([cur_word, cur_cnt])
cur_word = b
cur_cnt = 1
return sum(len(word) + (len(str(cnt)) if cnt > 1 else 0) for word, cnt in res)
def solution(text):
return min(compress(text, tok_len) for tok_len in list(range(1, int(len(text)/2) + 1)) + [len(text)])
- 대충 훑어봤는데, 접근 방식은 비슷한 거 같다
기억해야할 것
- 문자열 문제를 많이 풀어야겠다
- 쉬운 문제인데 머리가 너무 아프다
- 문제 푸는데 너무 오래걸리고, 인덱스가 너무 헷갈린다 ㅠㅠ
- 문제를 잘 읽자
- 앞에서부터 일정한 개수로 잘라야한다는 걸 못봤다
- 어쩐지 너무 경우의 수가 많았다
'코딩테스트' 카테고리의 다른 글
[프로그래머스][KAKAO_BLIND][2018] 파일명 정렬 (0) | 2021.08.11 |
---|---|
[백준][문자열] Cubeditor (0) | 2021.08.11 |
[프로그래머스][KAKAO_BLIND][2020] 가사 검색 (0) | 2021.08.10 |
[백준][문자열] AC (0) | 2021.08.10 |
[백준][문자열] 전화번호 목록 (0) | 2021.08.10 |