본문 바로가기
algorithm

[JAVA] 문자열 압축 (kakao 2020)

by onejunu 2020. 7. 25.

String 관련 문제를 해결하기 위해서는 Stringbuilder 를 쓰면 편하다는 글을 보고 시도해보았다.

 

내가 문제를 풀기 위해 공부했던 String 관련 도구들은 다음과 같다.

 

1) String 의 길이를 알기 위해서는 length() 메소드를 사용하면 된다.

2) String + String 보다는 Stringbuilder를 통해 append 하면 연산이 빠르다.

3) substring(시작위치,끝위치) 메소드를 이용해 문자열을 자른다. split 보다 권장되는 사항이라고 한다. 

 

 

위 3가지를 이용해 쉽게 풀었다.  알고리즘은 다음과 같다.

 

1) i = 1, answer = s의 길이;

2)  ( i < 문자열 길이의 반) 이라면 3번으로 간다. 아니라면 10)번으로 간다.

3) cnt =1 로 초기화 한다. 이는 문자열이 몇번 반복되었는가를 표시한다. sb = new StringBuilder(); 로 초기화한다.

4) 초기 문자열 s를 0 ~ i 번까지 부분 문자열로 자른다음 preString 에 저장한다. 

5) j=i 

6) 문자열 s를 [j:j+i] 까지 자르고 preString과 비교한다. 

    5-1) 같으면 cnt증가

    5-2) 다르고 cnt가 1 이면 preString을 sb 에 추가한다.

    5-3) 다르고 cnt가 1이 아니면 cnt 를 sb에 추가한다. 그리고  preString을 sb에 추가한다.

    5-4) cnt 를 1로 초기화하고 preString에 문자열s의 부분 문자열인 [j:j+i] 를 저장한다.

7) j가 문자열 s 보다 길이가 짧다면 6)으로 간다.

8) cnt가 1이면 preString을 sb에 추가하고 아니면 cnt+preString을 sb에 추가한다.

9) sb의 길이가 answer 보다 짧으면 answer = sb.length(); 2)번으로 이동한다.

10) answer를 반환한다.

 

 

아래는 전체 소스코드.

 

댓글