
-Code
import java.util.*;
class Solution {
public int solution(String s) {
int strLen = s.length();
int answer = strLen;
// 중복되려면 같은 길이의 문자열이 2개 이상 존재해야 함
for (int splitLen = 1; splitLen <= strLen / 2; splitLen++) {
int cnt = 1;
// 첫 부분 셋팅
String before = s.substring(0, splitLen);
// 나눌 길이로 나누어 문자열 생성
StringBuilder convStr = new StringBuilder();
for (int i = splitLen; i < strLen; i += splitLen) {
// 인덱스 오류를 제거가히 위한 마지막 위치 셋팅
int end = Math.min(i + splitLen, strLen);
// 현재 문자열 생성
String now = s.substring(i, end);
if (!before.equals(now)) {
// 현재와 이전 문자열이 다른 경우
if (cnt > 1) {
// 1초과인 경우에만 cnt 추가
convStr.append(cnt);
}
// 이전 문자열 추가 후 이전 문자열 변경
convStr.append(before);
before = now;
// 갯수 초기화
cnt = 1;
} else {
// 같은 문자열이므로 cnt만 증가
cnt++;
}
}
// 마지막 문자열이 존재하면 추가
if (cnt > 1) convStr.append(cnt);
convStr.append(before);
// 최소 길이인 경우 answer 변경
answer = Math.min(answer, convStr.length());
}
return answer;
}
}
1개씩 하는 방식을 구상하고 생각이 막혀서 이후로 시간 초과 문제가 날까 등 여러 생각으로 진행을 못하다가 알고 보니 그냥 똑같이 나눌 길이만 변경해서 진행하면 되는 문제였습니다.
추가로 초기 값 셋팅에서 cnt와 for문으로 문자열을 만든 후 마지막 문자열이 존재한 경우에도 세팅을 해야 하는데 이 부분도 적용하지 않아서 한 번 더 틀렸었습니다.
'알고리즘 문제 > Java' 카테고리의 다른 글
| [goormlevel/Java] 재참석자 수 세기 (0) | 2026.05.16 |
|---|---|
| [프로그래머스/Java] 혼자 놀기의 달인 (0) | 2026.05.15 |
| [프로그래머스/Java] 거리두기 확인하기 (0) | 2026.05.13 |
| [프로그래머스/Java] 두 큐 합 같게 만들기 (0) | 2026.05.12 |
| [프로그래머스/Java] 3 x n 타일링 (0) | 2026.05.11 |