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를 반환한다.
아래는 전체 소스코드.
'algorithm' 카테고리의 다른 글
[JAVA] 괄호변환 (kakao 2020) (0) | 2020.07.31 |
---|---|
[JAVA] 나무 자르기 (백준 2805) (0) | 2020.07.30 |
[JAVA] 블록 이동하기 (kakao 2020) (0) | 2020.07.29 |
[JAVA/PYTHON] 자물쇠와 열쇠(kakao 2020) (0) | 2020.07.26 |
[JAVA] 주식가격 - 프로그래머스lv2 (0) | 2020.07.25 |
댓글