새소식

항해 99 TIL

99클럽 코테 스터디 4일차 TIL [substring]

  • -

- 오늘의 학습 키워드 : Java - substring 메서드

[문제 이름 : 문자열 압축]

문제 url : https://school.programmers.co.kr/learn/courses/30/lessons/60057

내가 작성한 코드는 아래와 같다.

class Solution {
    public int solution(String s) {
        int answer = s.length();
        for(int i= 1; i<= s.length() / 2; i++) {
            StringBuilder sb = new StringBuilder();
            // 압축 문자열 표현
            String now = s.substring(0, i);
            // 연속으로 같은 문자열 개수
            int count = 1;
            
            for(int j=i; j < s.length(); j += i) {
                // 다음 압축 단위 문자열
                String next = s.substring(j, Math.min(j + i, s.length()));
                
                // 압축 문자열과 같은 경우
                if(now.equals(next)) {
                    count++;
                } else {
                    // 기존에 압축 문자열이 있었던 경우
                    if(count > 1) {
                        sb.append(count);
                    } 
                    sb.append(now);
                    now = next;
                    count = 1;
                }
            }
            // 마지막으로 남은 문자열 처리
            
            if (count > 1) {
                sb.append(count);
            }
            
            sb.append(now);
            // 최소 길이 계산
            answer = Math.min(answer, sb.length());
        }
        
        return answer;
    }
}

 

문제 조건 중에, 아래와 같은 것이 있었다.

" 문자열은 제일 앞부터 정해진 길이만큼 잘라야 합니다."

 

압축 문자열인 만큼, 문자열의 절반 이상인 문자열은 의미가 없기 때문에, /2를 하여 절반 길이의 문자열에서 압축 문자열의 최소 길이를 구하였다.

이중 for 내부에서 다음 압축 단위 문자열을 구하는 과정, 그리고 압축 문자열의 동일 여부에 따라 값을 갱신하는 부분이 머리로는 떠오르는데, 코드로는 많이 헤맸던 것 같다.

또한, 마지막에 남은 문자열을 올바르게 처리해주지 않아서 계속 틀렸다.

substring()을 연습할 수 있는 기회가 되었고, 많은 문제를 풀어봐야 함을 다시금 느꼈다.

 

내일은 예전에 수강했던 인프런 강의에서 자바 코딩테스트 입문 Part1. String 문자열 파트부터 차근차근 복습해나갈 예정이다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.