문제
https://programmers.co.kr/learn/courses/30/lessons/60057
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문
programmers.co.kr
풀이
그냥 이중 반복으로 구현해서 풀었다.
바깥쪽 반복문의 인덱스는 unit(자르는 단위의 개수)이다.
내부는 while문을 추가해서 인덱스를 unit만큼 증가시키면서 현재와 이전 문자열을 비교해서 count를 계산하였다.
소스코드(JAVA)
import java.util.*;
class Solution {
public int solution(String s) {
int len = s.length();
int answer = len; // 나눠지지 않을 경우 문자열의 길이가 답이 되므로 기본값으로 설정해 놓는다.
for(int unit = 1; unit <= len/2; unit++){ // 나누는 단위는 한 개부터 ~ 문자열 길이의 절반까지 될 수 있다.
StringBuilder sb = new StringBuilder();
int idx = 0, cnt = 0;
String prev = "", cur ="";
while(idx < len){ // idx가 len보다 작을 경우 반복한다.
// 첫 번째 단위를 예외 처리한다.
if("".equals(prev)){
// 첫 번째는 문자 단위를 prev에 넣고, idx는 unit을 더해 갱신해준다.
// 해당 단위로 1개를 나눴으므로 cnt는 1을 할당한다.
prev = s.substring(idx, idx + unit);
idx = idx + unit;
cnt = 1;
continue;
}
// 마지막 단위를 예외처리 한다.
if(idx + unit >= len){
cur = s.substring(idx);
if(cur.equals(prev)){
sb.append(cnt++).append(cur);
} else {
if(cnt > 1) sb.append(cnt);
sb.append(prev);
sb.append(cur);
}
break;
}
// 해당 단위의 문자열이 이전 문자열과 동일한지 체크한다.
// 현재 문자열이 이전 문자열과 동일하다면 count를 증가시킨다.
cur = s.substring(idx, idx + unit);
if(cur.equals(prev)){
cnt++;
} else {
// 현재 문자열이 이전과 달라졌다면 이전 문자열과 count를 Buffer에 추가한다.
if(cnt > 1) sb.append(cnt);
sb.append(prev);
cnt = 1;
prev = cur;
}
idx = idx + unit;
}
answer = Math.min(sb.length(), answer);
}
return answer;
}
}
소스코드(Python)
def solution(s):
answer = 1001
if len(s) == 1:
return 1
for unit in range(1, len(s)):
# 문자열 끊기
arr = []
item = ''
for i in range(len(s)):
item += s[i]
if len(item) == unit:
arr.append(item)
item = ''
if item != '':
arr.append(item)
# 반복되는 문자열 숫자 처리
rs = ''
prev = arr[0]
cnt = 1
last = len(arr)-1
for i in range(1, len(arr)):
if arr[i] == prev:
cnt += 1
if i == last:
rs += str(cnt) + prev
else:
if cnt == 1:
rs += prev
else:
rs += str(cnt) + prev
prev = arr[i]
cnt = 1
if i == last:
rs += prev
answer = min(answer, len(rs))
return answer
'💡Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 야근 지수 (Java) (0) | 2021.10.29 |
---|---|
[프로그래머스] 추석 트래픽 (Java) (0) | 2021.10.29 |
[프로그래머스] N진수 게임 (Java) (0) | 2021.10.23 |
[프로그래머스] 프렌즈4블록 (Java) (0) | 2021.10.23 |
[프로그래머스] 게임 맵 최단거리 (Java) (0) | 2021.10.23 |