문제 설명

제한 사항

입출력 예


풀이
import java.util.ArrayList;
import java.util.Stack;
class Solution {
public int solution(String s) {
ArrayList<Integer> answer = new ArrayList<>();
for (int i = 1; i <= (int)Math.floor(s.length() / 2); i++) {
ArrayList<String> result = new ArrayList<>();
ArrayList<Integer> countList = new ArrayList<>();
Stack<String> count = new Stack<>();
StringBuilder stb = new StringBuilder();
for (int j = 0; j < s.length() - s.length() % i; j += i)
result.add(s.substring(j, j + i));
for (int j = 0; j < result.size(); j++) {
if (count.empty()) count.push(result.get(j));
else if (count.peek().equals(result.get(j))) count.push(result.get(j));
else {
if (count.size() != 1) countList.add(count.size());
count.clear();
count.push(result.get(j));
}
if (j == result.size() - 1 && count.size() != 1) countList.add(count.size());
}
if (countList.size() > 0) {
for (int j = 0; j < countList.size(); j++) stb.append("*".repeat(i));
for (Integer j : countList) stb.append(j);
answer.add(stb.toString().length() + s.length() - i * countList.stream().mapToInt(j -> j).sum());
}
}
return (answer.size() == 0) ? s.length() : answer.stream().filter(i -> i > 0).mapToInt(i -> i).min().getAsInt();
}
}
후기
문제를 푸는 것보다 문제를 이해하는 것이 더 중요하다는 것을 알게 해 준 문제이다. 문제를 잘못 이해해서 여러 번 다시 풀었다;; 처음에는 정규표현식으로 아래와 같은 방법으로 풀어보려고 했는데 뭔가 잘 안 돼서 그냥 직접 문자열 처리를 하기로 했다. 여러 가지 생각할 것이 많은 내용이라 나중에 다시 풀어볼 필요가 있을 것 같다. 그리고 스트림에 대해서... 스트림을 사용하면 실행 속도가 느려져서 어떻게 사용하지 않는 방법을 생각해 봐야겠다.
import java.util.Arrays;
class Solution {
public int solution(String s) {
int[] answer = new int[(int)Math.floor(s.length() / 2)];
StringBuilder result = new StringBuilder();
final String preReg = "(\\w{";
final String postReg = "})(?=\\1)";
answer[0] = s.replaceAll("(\\w{1})(?:\\1)+", " ").length();
for (int i = 1; i < (int)Math.floor(s.length() / 2); i++) {
result.setLength(0);
String temp = s.replaceAll(result.append(preReg).append(i + 1).append(postReg).toString(), " ");
if (temp.charAt(0) != ' ') answer[i] = s.length();
else answer[i] = temp.length();
}
return Arrays.stream(answer).min().getAsInt();
}
}'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][Java][Lv. 2] 의상 (0) | 2023.08.03 |
|---|---|
| [프로그래머스][JAVA][Lv. 2] 올바른 괄호 (0) | 2023.08.03 |
| [프로그래머스][JAVA][Lv. 2] 짝지어 제거하기 (0) | 2023.08.01 |
| [프로그래머스][JAVA][Lv. 1] 콜라츠 추측 (0) | 2023.08.01 |
| [프로그래머스][JAVA][Lv. 1] 평균 구하기 (0) | 2023.08.01 |