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에서 간단한 반복문을 사용해 문자열을 순회하면서 조건을 만족하도록 문자열을 만들어 나갑니다.
풀이 접근 방법
- 문자열 순회:
- 문자열을 처음부터 끝까지 순회하며, 각 문자(curr)와 이전 문자(prev)를 비교합니다.
- 연속된 문자 카운트:
- 현재 문자와 이전 문자가 같다면 **연속된 횟수(cnt)**를 증가시킵니다.
- 다른 문자라면 새로운 문자가 시작된 것이므로 cnt를 0으로 초기화하고 prev를 현재 문자로 갱신합니다.
- 결과 문자열 작성:
- 연속된 문자가 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