[문자열 압축] programmers.co.kr/learn/courses/30/lessons/60057

풀고 느낀점
간단하면서도 간단하지 않은 느낌이었습니다. 생각보다 푸는데 시간이 많이 들었습니다. 한 1시간정도 소요된 것 같습니다. 문제를 제대로 읽지 않아서 처음에 엉뚱한 방법으로 풀다가 문제를 잘못 읽은 것을 알고 다시 풀었습니다. 문제를 진짜 꼼꼼하게 읽어야할 것 같습니다. String 클래스의 startWith() 메소드를 활용해서 크기별로 계속 자르면서 List에 담았고 나중에 for문을 돌면서 가장 작은 String Length를 반환하도록 하였습니다. 첫 문제라서 쉽다고 생각하고 빨리 풀어야지 하다가 결국 더 오래 걸린 느낌입니다. 문제를 꼼꼼히 읽는 습관을 길어야 할 것 같습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package algorithms.online.kakao.year2020; | |
import java.util.ArrayList; | |
import java.util.Comparator; | |
import java.util.List; | |
/** | |
* 문자열 압축 | |
* https://programmers.co.kr/learn/courses/30/lessons/60057 | |
*/ | |
public class Problem1 { | |
public static void main(String[] args) { | |
Problem1 problem1 = new Problem1(); | |
System.out.println(problem1.solution("aabbaccc")); | |
System.out.println(problem1.solution("ababcdcdababcdcd")); | |
System.out.println(problem1.solution("abcabcdede")); | |
System.out.println(problem1.solution("abcabcabcabcdededededede")); | |
System.out.println(problem1.solution("xababcdcdababcdcd")); | |
} | |
public int solution(String s) { | |
int len = s.length() / 2; | |
List<String> store = new ArrayList<>(); | |
for (int size = 1; size <= len; size++) { | |
String target = s.substring(0, size); | |
String sub = s.substring(size); | |
StringBuilder candidate = new StringBuilder(); | |
int count = 1; | |
while (sub.length() != 0) { | |
while (sub.startsWith(target)) { | |
count++; | |
sub = sub.substring(size); | |
} | |
if (count != 1) { | |
candidate.append(count); | |
candidate.append(target); | |
} else { | |
candidate.append(target); | |
} | |
if (sub.length() == 0) { | |
break; | |
} | |
if (target.length() > sub.length()) { | |
candidate.append(sub); | |
break; | |
} | |
target = sub.substring(0, size); | |
count = 0; | |
} | |
store.add(candidate.toString()); | |
} | |
return store.stream().min(Comparator.comparingInt(String::length)).map(String::length).orElse(s.length()); | |
} | |
} |
'Study with book > Algorithms' 카테고리의 다른 글
[프로그래머스] 해시 > 위장(0) | 2021.03.30 |
---|---|
[2020 카카오 블라인드 온라인 코딩 테스트] 괄호 변환(0) | 2021.03.30 |
[2019 카카오 블라인드 온라인 코딩 테스트] 후보키(0) | 2021.03.30 |
[카카오 코드 페스티벌 2018 예선] 인형들(2) | 2020.10.18 |
[백준]설탕 배달(0) | 2020.10.02 |