반응형
문자열을 파싱하는 문제이다.
주어진 조건대로 단순히 문자열을 파싱해주는 문제이다. 일단 봐야하는 문자열 길이를 1부터 전체길이/2 를 해주었고, keep이라는 변수를 통해 현재까지 같은 누적을 계산하여 문자열의 길이를 구해주었다. 단순 구현 시뮬레이션 문제이므로 조건을 꼼꼼히 읽는 것이 중요한 문제였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
package programmers;
public class Solution_2020카카오_문자열압축 {
public static void main(String[] args) {
// String s="aabbaccc";
String s="ababcdcdababcdcd";
// String s="abcabcdede";
// String s="abcabcabcabcdededededede";
// String s="xababcdcdababcdcd";
System.out.println(solution(s));
}
static int solution(String s) {
int result= s.length();
for(int len=1; len<=s.length()/2;len++) { //전체길이의 절반까지만 확인
int temp=s.length()%len; //맨마지막에 안도는 것들 일단 더해주기
String cur = null,next=null;
int keep=1; //현재 카운트 갯수
for(int start=0;start<=s.length()-len;start+=len) { //시작점 설정
if(start==0) {
cur=s.substring(start,start+len); //첫번째
}else {
next=s.substring(start,start+len);
if(cur.equals(next)) { //같은 문자열일때 카운트 추가
keep+=1;
}else { //다른 문자열일때
if(keep!=1) { //누적이 하나가 아니면
temp+=len+ calc(keep);
}else {
temp+=len; //누적이 하나면
}
cur=next;
keep=1;
}
}
}
if(keep!=1) {
temp+=len+calc(keep);
}else {
temp+=len;
}
cur=next;
keep=1;
result=Math.min(temp, result);
}
return result;
}
static int calc(int keep) {
int result=0;
while(keep!=0) {
keep/=10;
result++;
}
return result;
}
}
|
반응형
'Algorithm' 카테고리의 다른 글
[Programmers] 길 찾기 게임 (0) | 2020.08.16 |
---|---|
[BOJ] 9466. 텀 프로젝트 (4) | 2020.08.15 |
[BOJ] 2644. 촌수계산 (0) | 2020.08.11 |
[BOJ] 1931. 회의실배정 (0) | 2020.08.08 |
[Programmers] 추석 트래픽 (0) | 2020.08.07 |