조앤의 기술블로그
[프로그래머스 / 카카오] 문자열 압축 (java) 본문
[문제]
[문제접근]
어렵게만 생각했는데 2개 단위로 압축 , 3개단위로 압축단위가 분리(?) 되어있는 것이었다!!!
문제를 끝까지 꼼꼼히 잘읽자!
for(int i = 1; i <= s.length(); i++) {
for(int j = 0; j <= s.length()-i; j++) {
String tmp = "";
tmp = s.substring(j, j+i);
//System.out.println(tmp);
String bin = s.substring(j+i, j+i+i);
if(tmp == bin) {
}
}
}
처음엔 이렇게 엄청 복잡하게 생각했다; (단위 구하는 부분)
for(int len = 1; len < s.length; len++){
String target = "";
//단위 지정
for(int i = 0; i < len; i++){
target += s.charAt(i);
}
나중에 이렇게 수정!!
class Solution {
public int solution(String s) {
int answer = 987654321;
for(int len = 1; len < s.length(); len++){
String target = "";
String result = ""; //압축된 문자열
String current = ""; //단위와 비교할 현재 문자열
int count = 1;
//단위 지정
for(int i = 0; i < len; i++){
target += s.charAt(i);
}
//단위만큼 자른다.
// 단위 다음 문자랑 비교해야 하므로 len부터 시작
for(int i = len; i < s.length(); i+=len){
current = "";
// 현재 비교할 문자열 만들기
for(int j = i; j < i + len; j++){
if(j >= s.length()) break;
current += s.charAt(j);
}
// 이것도 3중 for문을 피할 수 없는 것인가..
if(target.equals(current)){
count++;
} else {
if(count > 1)
result += count + target;
else
result += target;
count = 1;
target = current;
}
}
if(count > 1)
result += count + target;
else
result += target;
int length = result.length();
if(answer > length)
answer = length;
}
if(answer == 987654321) answer = 1;
return answer;
}
}
[참고]
https://keepgoing0328.tistory.com/entry/2020카카오-공채-문자열-압축-자바
https://velog.io/@hyeon930/프로그래머스-문자열-압축-Java
[문제 링크]
'Programming > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 스택&큐] 프린터 (java) (0) | 2020.03.25 |
---|---|
[프로그래머스] 스킬트리 (java) (0) | 2020.03.23 |
[프로그래머스] 카카오 프렌즈 컬러링북 (java) (0) | 2020.03.23 |
[프로그래머스 / SQL] SELECT (mysql) (0) | 2020.03.23 |
[프로그래머스 / 완전탐색] 카펫 (c++, java) (0) | 2020.03.22 |