Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Java
- Interface
- java Collections.sort()
- java lambda
- 자바입출력
- 자바
- jquery 이벤트 처리
- 조합 재귀
- 알고리즘
- 자바 조합 재귀
- char to str
- 순열 재귀
- 순열코드
- 자바스크립트 이벤트처리
- inner class
- java 내부 클래스
- jquery 필터선택자
- 자바스크립트 이벤트중지
- 자바 재귀 조합
- jquery 속성선택자
- 자바 순열 코드
- str to char array
- 알고리즘 그래프
- 재귀
- parseInt()
- 후위표기
- jquery dom 계층 선택자
- 상속
- 재귀함수
- 서로소
Archives
- Today
- Total
유블로그
[프로그래머스] 문자열 압축 본문
[프로그래머스] level2 문자열 압축
소요시간 : 42분
map 으로 삽질하다가 오래 걸린 문제.. ㅋ
절대 40분씩이나 걸릴 만한 문제는 아닌 듯
자르는 단위를 1부터 단어길이의 반까지 모두 시도해본다.
단어 길이의 반 초과 부터는 어차피 압축필요없이 문자열길이와 압축길이가 같으므로 시도하지 않는다.
자르는 단위대로 cur 과 next를 갱신하는데,
cur과 next가 같으면 계속 count를 올려서 같은 문자열이 몇 번 나왔는지 체크한다.
cur과 next가 다르면 StringBuilder에 append 후 cur에 next를 담아 비교대상을 바꿔주고 , count = 1로 초기화한다.
이걸 문자열 끝까지 확인하여 StringBuilder 길이로 MIN 을 갱신한다.
class Solution {
public int solution(String s) {
for (int len = 1; len < s.length(); len++) {
cut(len, s);
}
if(MIN > s.length()) MIN = s.length();
return MIN;
}
int MIN = Integer.MAX_VALUE;
public void cut(int len, String s) {
StringBuilder sb = new StringBuilder();
String cur = s.substring(0, len);
String next;
int count = 1;
for (int i = len; i < s.length(); i+=len) {
if(i+len <= s.length()) next = s.substring(i, i+len);
else next = s.substring(i);
if(cur.equals(next)) {
count++;
}
else {
if(count > 1) sb.append(count).append(cur);
else sb.append(cur);
cur = next;
count = 1;
}
}
if(count > 1) sb.append(count).append(cur);
else sb.append(cur);
if(MIN > sb.length()) MIN = sb.length();
}
}
'알고리즘' 카테고리의 다른 글
[프로그래머스] 튜플 (0) | 2021.01.18 |
---|---|
[프로그래머스] 괄호변환 (0) | 2021.01.18 |
[프로그래머스] 카카오 프렌즈 컬러링북 (0) | 2021.01.15 |
[프로그래머스] 삼각달팽이 (0) | 2021.01.15 |
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2021.01.11 |