-
[프로그래머스] 문자열 압축(2020 KAKAO BLIND RECRUITMENT)Algorithm 2021. 1. 18. 15:51
프로그래머스에서 문자열 압축 문제를 풀어봤습니다.
문자열이 가장 큰 단위로 압축되는 경우는 문자열 길이의 절반 길이로 자르는 경우이므로 1~문자열 길이/2 까지를 전부 판단하며 결과가 가장 짧은 문자열의 길이를 Return 하는 문제입니다.
현재 위치를 index, 자르고자 하는 단위의 길이를 num이라고 했을때, index부터 num만큼의 길이를 unit변수에 넣습니다.그리고 unit의 다음 위치에 오는 문자열이 unit과 같으면 count변수를 하나씩 증가시키며 index를 이동합니다.더 이상 동일한 문자열이 나오지 않으면 resultStr에 count변수와 unit을 붙여주고, 다음 위치로 이동합니다.남은 문자열이 num보다 짧아 더 이상 이동할 수 없게 되면 나머지 문자열을 resultStr에 붙여줍니다.
public void solve(String str, int num){ int index = 0; int count = 1; String resultStr = ""; while(str.length()-index>num){ if(resultStr.length()>str.length()) break; String unit = str.substring(index, index+num); while(str.length()-index>=2*num&&unit.equals(str.substring(index+num, index+num+num))){ count++; index+=num; } resultStr += count>1?count+unit:unit; count = 1; index+=num; } resultStr+=str.substring(index, str.length()); list.add(resultStr.length()); }
전체 코드
import java.util.*; class Solution { ArrayList<Integer> list = new ArrayList<>(); public int solution(String s) { int answer = 0; if(s.length()==1) return 1; for(int i=1; i<=s.length()/2; i++){ solve(s, i); } Collections.sort(list); answer = list.get(0); return answer; } public void solve(String str, int num){ int index = 0; int count = 1; String resultStr = ""; while(str.length()-index>num){ if(resultStr.length()>str.length()) break; String unit = str.substring(index, index+num); while(str.length()-index>=2*num&&unit.equals(str.substring(index+num, index+num+num))){ count++; index+=num; } resultStr += count>1?count+unit:unit; count = 1; index+=num; } resultStr+=str.substring(index, str.length()); list.add(resultStr.length()); } }
'Algorithm' 카테고리의 다른 글
[프로그래머스] 후보키(2019 KAKAO BLIND RECRUITMENT) - JavaScript (0) 2021.03.07 [프로그래머스] 자물쇠와 열쇠(2020 KAKAO BLIND RECRUITMENT) (0) 2021.01.18 [프로그래머스] 괄호 변환(2020 KAKAO BLIND RECRUITMENT) (0) 2021.01.10 [프로그래머스] 튜플(2019 카카오 개발자 겨울 인턴십 (0) 2021.01.10 [프로그래머스] 후보키(2019 KAKAO BLIND RECRUITMENT) (0) 2021.01.09