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
- 사이클게임
- 파괴되지않은건물
- 그래프탐색
- 최단경로
- 파이썬
- DP
- 17404
- 두큐합같게만들기
- 위상정렬
- 다익스트라
- 트리의지름
- 프로그래머스
- 이모티콘할인행사
- 구현
- DFS
- 큐
- BFS
- 거리두기확인하기
- 알고리즘
- [1차]캐시
- javascript
- 징검다리건너기
- 자물쇠와열쇠
- 백준
- 최소스패닝트리
- 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 |