티스토리 뷰

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/60057?language=java

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

2. 설명

다른 사람들은 좀 더 짧고 간단하게 풀었더라 ;ㅅ;

재귀로 num개 단위로 자르도록 했다.

매개변수에 최솟값도 같이 넣어서 보내도록 했다.

뭔가 코드가 더러운거 같은데 ㅋㅋㅋ 최선을 다했당 아몰랑

 

3. 코드

import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;
        answer = compress(s, 1, s.length());
        return answer;
    }
    
    int compress(String s, int num, int min) {
        if(num > s.length()/2 + 1) return min;
        
        // num개 단위로 자르기
        List<String> list = new ArrayList<>();
        for(int i=0; i<=s.length()-num; i++) {
            list.add(s.substring(i, i+num));
            i += num - 1;
        }
        int remainder = s.length()%num; // 나머지
        
        // 같은 문자열 찾아서 압축
        int n = 1;
        String result = "";
        String str1 = list.get(0);
        for(int j=1; j<list.size(); j++) {
            String str2 = list.get(j);
            if(str1.equals(str2)) {
                n++;
                continue;
            }
            
            if(n > 1) result += n + str1;
            else result += str1;
            
            n = 1;
            str1 = str2;
        }
        if(n > 1) result += n + str1;
        else result += str1;
        
        int len = result.length() + remainder;
        
        return compress(s, num + 1, min > len ? len : min);
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday