TIL

[코테연습] 1957. Delete Characters to Make Fancy String

크라00 2024. 11. 1. 11:28

문제 종류

문자열 문제


문제 분석

주어진 문제는 문자열에서 연속으로 3번 이상 등장하는 같은 문자를 제거하여, 연속된 문자가 2번 이하로 나타나도록 만드는 것입니다. 문자열 s는 최대 10^5의 길이를 가질 수 있으며, 모든 문자는 소문자로 구성됩니다.

문제의 주요 조건

  • 연속된 문자가 3번 이상 등장하면 그 문자 중 일부를 제거하여 2번 이하로 만들기.
  • 예를 들어, 문자열이 "aaabaaaa"인 경우, **출력 문자열은 "aabaa"**가 되어야 합니다.
    • 여기서 a가 연속해서 3번 이상 나타난 부분을 제거해 최종적으로 2번만 남도록 만듭니다.

입력 및 출력 예시

  • 입력: "aaabaaaa"
  • 출력: "aabaa"

문제 풀이

문제를 해결하기 위해 연속된 문자를 카운트하고, 2번 이하로 유지하는 방식으로 접근할 수 있습니다. 이를 위해 Python에서 간단한 반복문을 사용해 문자열을 순회하면서 조건을 만족하도록 문자열을 만들어 나갑니다.

풀이 접근 방법

  1. 문자열 순회:
    • 문자열을 처음부터 끝까지 순회하며, 각 문자(curr)와 이전 문자(prev)를 비교합니다.
  2. 연속된 문자 카운트:
    • 현재 문자와 이전 문자가 같다면 **연속된 횟수(cnt)**를 증가시킵니다.
    • 다른 문자라면 새로운 문자가 시작된 것이므로 cnt0으로 초기화하고 prev를 현재 문자로 갱신합니다.
  3. 결과 문자열 작성:
    • 연속된 문자가 2번 미만인 경우에만 결과 문자열에 해당 문자를 추가합니다.

> java

 

class Solution {
    public String makeFancyString(String s) {
        int n = s.length();

        // 리턴할 StringBuilder
        StringBuilder sb = new StringBuilder();

        // 이전 char 를 저장할 변수
        char prev = 0;
        
        // 이전 char 과 몇번 동일 했는지를 확인할 변수
        int cnt = 0;

        // 글자 수 만큼 반복
        for (int i = 0; i < n; i++) {
            char c = s.charAt(i);
            if (prev == c) {
                cnt++;
            } else {
                prev = c;
                cnt = 0;
            }
            if (cnt < 2) {
                sb.append(c);
            }
        }

        return sb.toString();
    }
}

 

> python

 

class Solution:
    def makeFancyString(self, s: str) -> str:
        answer = "";
        cnt = 0
        prev = ""
        for curr in s :
            if curr == prev :
                cnt+=1
            else :
                prev = curr
                cnt = 0
            if cnt < 2 :
                answer+=curr
        return answer