[프로그래머스] Lv. 2 문자열 압축(Java)
by rowing0328https://school.programmers.co.kr/learn/courses/30/lessons/60057
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
정답 코드
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Solution {
public int solution(String s) {
int min = Integer.MAX_VALUE;
for (int length = 1; length <= s.length(); length++) {
int compressed = compress(s, length);
if (compressed < min) {
min = compressed;
}
}
return min;
}
private int compress(final String source, final int length) {
StringBuilder builder = new StringBuilder();
String last = "";
int count = 0;
for (String token : split(source, length)) {
if (token.equals(last)) {
count++;
} else {
if (count > 1) builder.append(count);
builder.append(last);
last = token;
count = 1;
}
}
if (count > 1) builder.append(count);
builder.append(last);
return builder.length();
}
private List<String> split(final String source, final int length) {
List<String> tokens = new ArrayList<>();
for (int startIndex = 0; startIndex < source.length(); startIndex += length) {
int endIndex = startIndex + length;
if (endIndex > source.length()) endIndex = source.length();
tokens.add(source.substring(startIndex, endIndex));
}
return Collections.unmodifiableList(tokens);
}
}
설명
1. 1부터 입력 문자열 s의 길이만큼 자를 문자열의 길이를 설정하며 반복한다.
2. 설정된 길이만큼 문자열을 잘라 낸 token의 배열 생성한다.
3. 문자열을 비교하며 token의 배열을 하나의 문자열로 압축한다.
4. 1 ~ 3 과정으로 압축된 문자열 중 가장 짧은 길이 반환한다.
실행 결과
참고 자료 :
취업과 이직을 위한 프로그래머스 코딩 테스트 문제 풀이 전략 : 자바 편 | 김현이
프로그래머스 코딩 테스트 문제 풀이 전략: 자바 편 | 김현이 - 교보문고
프로그래머스 코딩 테스트 문제 풀이 전략: 자바 편 | 핵심 개념, 프로그래머스에서 선별한 79개 문제 풀이, PCCP 대비까지! 합격에 한 걸음 더 가까워지는 실전형 코딩 테스트 문제 풀이 가이드개
product.kyobobook.co.kr
'🏅Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] Lv. 1 숫자 문자열과 영단어(Java) (0) | 2025.02.03 |
---|---|
[프로그래머스] Lv. 1 문자열 내 p와 y의 개수(Java) (0) | 2025.02.03 |
[프로그래머스] Lv. 1 삼진법 뒤집기(Java) (2) | 2025.01.20 |
[프로그래머스] Lv. 2 행렬의 곱셈(Java) (0) | 2025.01.13 |
[프로그래머스] Lv. 2 거리두기 확인하기(Java) (0) | 2025.01.13 |
블로그의 정보
코드의 여백
rowing0328