📍 문제 설명
💡 접근
x개로 잘랐을 때의 문자열을 잘 넣어주긴 했는데 마지막 배열의 문자열의 처리와 정확히 x개로 잘리지 않았을때 남는 문자열에 대한 처리에 대해서 좀 많이 고민했다.
빈칸을 하나넣어줘서는 1개로 잘랐을 때의 마지막 문자열 처리밖에 되지 않아서 마지막 배열일 때 cnt 값에 따라 문자열이 더해질 수 있도록 했고 정확히 x개로 잘리지 않았을 때는 자른 문자열 subStr 변수에 그대로 남아있을테니 모든 처리 후 마지막에 해당 문자열을 넣어줘서 처리했다.
👩💻 코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
String s = kb.nextLine();
//압축되지않을 땐 그 문자열의 길이로 한다.
int answer = s.length();
//s = 5 or 6
//1개 단위로 잘라 압축했을 때
//2개 단위로 잘라 압축했을 때
//s.length/2개 단위로 잘라 압축했을 때까지 확인(홀수개의 문자열이어도 해당함)
//문자열 하나 가지고 판단한다.
//i == i + 1 일 때는 count++
//i != i + 1 일 때는 출력하는데 count가 1이 아니면 앞에 출력하고 i번째 문자열 출력
//이런식으로 i = s.length - 1 까지 탐색
//문자열 두개 가지고 판단한다.
//두 개를 하나의 인덱스로 하는 배열을 만들고(크기는 2, 3) s.length/2 - 1 (1번 or 2번 탐색한다) aabbc aabbcc
//어디까지? -> s.length/2 - 1 까지 탐색 2.5,3
//문자열 세개 가지고 판단한다.
//세 개를 하나의 인덱스로 하는 배열을 만들고(크기는 1, 2) s.length/3 - 1 (0번 or 1번 탐색한다)
//어디까지? -> s.length/3 - 1 까지 탐색 1.67, 2
//x개 단위로 잘라 압축했을 때
for(int i = 1; i <= s.length()/2; i++) {
//자른 문자열 저장
String subStr = s;
//새로운 문자열 저장
String newStr = "";
//문자열 압축 횟수 저장
int cnt = 1;
//문자열 x개를 하나의 인덱스로 하는 배열을 만든다.
String[] arr = new String[s.length()/i]; //5 2 1
//저 배열 안에다가 자른 문자열들을 넣는다.
//i = 1 0-0,1 1-1,2 2-2,3 3-3,4 4-4,5
//i = 2 0-0,2 1-2,4
//i = 3 0-0,3
for(int j = 0; j < arr.length; j++) {
//i개 만큼 문자열자르기
arr[j] = subStr.substring(0, i);
//원본 문자열은 건들지 말아야 다음 단위에서 쓸 수 있다.
//i개 이후로 문자열을 다시 저장
subStr = subStr.substring(i);
}
//저장된 배열을 돌려서 압축 가능한지 확인한다.
for(int k = 0; k < arr.length-1; k++) {
//압축 가능하면
if(arr[k].equals(arr[k+1])) {
cnt++;
}
else {
//같지않으면 앞에서 반복된 변수인지 확인
if(cnt > 1) {
newStr += cnt + arr[k];
cnt = 1;
}
else newStr += arr[k];
}
//마지막 배열의 문자열 처리해줘야해
if(k+1 == arr.length-1) {
if(cnt > 1) newStr += cnt + arr[k+1];
else newStr += arr[k+1];
cnt = 1;
}
}
//그리고 substr에 남아있는 문자열은 더해줘야함
if(subStr != "") newStr += subStr;
answer = Math.min(answer, newStr.length());
}
System.out.println(answer);
}
}
'Algorithm > 이코테' 카테고리의 다른 글
11.뱀 (0) | 2022.01.06 |
---|---|
10.자물쇠와 열쇠 (0) | 2021.12.11 |
8.문자열 재정렬 (0) | 2021.12.11 |
7.럭키 스트레이트 (0) | 2021.12.11 |
6.무지의 먹방 라이브 (0) | 2021.12.10 |