반응형
프로그래머스 문자열 압축 - JAVA
문제 설명이 너무 길어 생략
[문제 보기] : https://programmers.co.kr/learn/courses/30/lessons/60057
문제 풀이
문자열의 길이를 n이라고 할 때 문자열을 1부터 n/2까지 쪼개며 압축시킨 경우를 전부 확인해봐야하는 완전탐색 유형의 문제이다.
단위별로 총 압축했을 때의 문자열 길이에 압축이 1이상 가능한 경우 압축했을때의 문자열 길이를 더하는 방식으로 단위별 길이를 구할 수 있다. 문자열 s를 순회하며 단위별로 짤라 비교하며 압축 여부를 찾아 길이를 구하는 방식이다.
저처럼 반복횟수가 1인 경우 자르는 길이만큼 더하고, 그 이상인 경우 자르는 길이와 반복 횟수(10이상인경우 2칸 차지하므로 생각해서 더해야 한다)의 길이를 더하는 방식이 있고, 문자열을 더하는 방식으로 푸는 방법도 있다.
소스 코드
class Solution {
public int solution(String s) {
int answer = s.length();
for (int i = 1; i <= s.length() / 2; i++) {
int len = 0, j = 0;
while (j <= s.length() - i) {
String unit = s.substring(j, j + i);
int cnt = 0;
for ( ; j <= s.length() - i; j += i) {
if (unit.equals(s.substring(j, j + i))) {
cnt++;
} else {
break;
}
}
if (cnt == 1) {
len += i;
}
else {
len += (String.valueOf(cnt).length() + i);
}
}
len += s.length() - j;
answer = Math.min(answer, len);
}
return answer;
}
}
반응형
'알고리즘(Algorithm) > 프로그래머스(Programmers)' 카테고리의 다른 글
[프로그래머스] 전력망을 둘로 나누기 - JAVA (0) | 2021.11.08 |
---|---|
[프로그래머스] n^2 배열 자르기 - JAVA (0) | 2021.11.06 |
[프로그래머스] 직사각형 별찍기 - JAVA (0) | 2021.11.03 |
[프로그래머스] x만큼 간격이 있는 n개의 숫자 - JAVA (0) | 2021.11.03 |
[프로그래머스] 행렬의 덧셈 - JAVA (0) | 2021.11.03 |