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 | 31 |
Tags
- 파이썬
- BFS
- 사이클게임
- 도넛과막대그래프
- DP
- 그래프탐색
- 트리의지름
- 17404
- 프로그래머스
- 자물쇠와열쇠
- [1차]캐시
- 최단경로
- 두큐합같게만들기
- 구현
- 큐
- 최소스패닝트리
- javascript
- 벽부수고이동하기
- 프림알고리즘
- 파괴되지않은건물
- 알고리즘
- 백준
- 거리두기확인하기
- 다익스트라
- 징검다리건너기
- 섬연결하기
- 이모티콘할인행사
- 위상정렬
- DFS
- RGB거리2
Archives
- Today
- Total
블로그 이름 뭐로 하지
[알고리즘] 프로그래머스 - 문자열 압축 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/60057
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
만약 문자열이 abc 라면 2개씩 나누는것부터는 의미가 없다. ababa 라면 3개씩 나누는것부턴 의미가 없다. 무조건 처음과 똑같은 문자열 길이가 나오기 때문이다. => 즉 최대 문자열 길이 // 2 만큼 씩 나눠서 확인하면 된다는 뜻!
해당 아이디어를 바탕으로 큐에 문자열을 넣어주고 1부터 문자열길이 // 2 까지 for문을 돌면서 각 케이스마다 문자열이 얼마나 압축되는지 확인한다. 문자열을 앞에서부터 잘라서 이전에 나온 문자열과 같으면 result값만 올려주고, 다른 값이 나오면 지금까지 동일하다고 나온 아이들의 값을 현재 문자열에 넣어준다. 말로 표현하기 조금 힘든데... 코드를 보면 바로 이해가 될 거다...!
사실 코드가 좀 더러운데 ㅠ 귀차니즘으로 인해 더 줄이진 않았다....
코드
from collections import deque
def solution(s):
s_len = len(s)
answer = s_len
n = s_len // 2
for i in range(1,n+1):
q = deque(list(s))
cnt_s = ''
cnt_word = ''
result = 0
while q:
word = ''
for _ in range(i):
word += q.popleft()
if not q:
break
if cnt_word == '':
cnt_word = word
result = 1
elif cnt_word != '' and cnt_word == word:
result += 1
else:
if result == 1:
cnt_s += cnt_word
else:
cnt_s += (cnt_word + str(result))
cnt_word = word
result = 1
if not q:
if result == 1:
cnt_s += cnt_word
else:
cnt_s += (cnt_word + str(result))
answer = min(answer,len(cnt_s))
return answer
'알고리즘' 카테고리의 다른 글
[알고리즘/파이썬] 백준 1191 - 트리순회 (1) | 2024.01.13 |
---|---|
[알고리즘] 프로그래머스 - k진수에서 소수 개수 구하기 (1) | 2024.01.11 |
[알고리즘] 백준 1987 - 알파벳 (1) | 2024.01.10 |
[알고리즘] 프로그래머스 - 괄호 변환 (0) | 2024.01.09 |
[알고리즘] 프로그래머스 - 타겟넘버 (0) | 2024.01.09 |