Algorithm

[PCCP] 마무리 [0]

Uykm 2023. 8. 18. 00:53

▼ What ?

이제 지금까지 배운 것들을 전체적으로 활용해보는 문제들을 풀어보려고 한다. 이번 문제는 문자열을 다루는 문제이다.


▼ 문자열 압축

 

문제 정보

알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하세 요. 단 반복횟수가 1인 경우 생략합니다.

 

제한사항

  • 문자열 s의 길이는 100을 넘지 않습니다.

 

입출력 예

 

어떻게 해결해야 할까 ?

  1. 새로운 문자가 발견되기 전까지 해당 문자의 빈도수를 체크해주고, 새로운 문자가 발견되면 그전 문자와 해당 문자의 빈도수를 해주면 StringBuilder에 더해주면 될 것 같다
  2. 기본형 정수(int)를 StringBuilder에 'append()' 해줄 때엔 'String.valueOf()'를 이용 String 객체로 변환을 먼저 해줘야 한다
  3. 단, 문자가 연속으로 반복되지 않을 경우엔 반복 횟수(1)가 반환되지 않도록 한다
  4. 그리고 마지막으로 등장한 문자는 이후에 새로운 문자가 발견될 수 없기 때문에 따로 계산해서 StringBuilder에 더해줘야 한다

 

해결 코드

import java.util.*;

class Solution {
    public String solution(String s) {

        StringBuilder sb = new StringBuilder();
        int count = 1;
        
        for(int i = 1; i < s.length(); i++) {
            // 바로 전 문자와 같은 문자가 탐색된 경우
            if(s.charAt(i-1) == s.charAt(i)) count++;
            else {
                sb.append(s.charAt(i-1);
                if(count > 1) sb.append(String.valueOf(count));
                count = 1;
            }
        }
        
        sb.append(s.charAt(s.length() - 1));
        if(count > 1) answer.append(String.valueOf(count));
        
        return sb.toString();
    }
}

 


▼ 정리

 

  • StringBuilder에 'append()' 해줄 때에 기본형 정수(int)를 String 객체로 변환시켜주기 위해서 'String.valueOf()'를 사용했는데, String 객체로 변환하는 것 말고도 'Integer.valueOf()'처럼 다른 class에도 해당 class 타입의 객체로 변환해줄 수 있는 'valueOf()'라는 이름의 메서드가 정의되어 있다는 것을 기억해두자