[level 1] 문자열 나누기 - 140108
성능 요약
메모리: 4.18 MB, 시간: 0.22 ms
구분
코딩테스트 연습 > 연습문제
채점결과
정확성: 100.0
합계: 100.0 / 100.0
제출 일자
2024년 04월 08일 19:30:44
문제 설명
문자열 s
가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
- 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
- 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
s
에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.- 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
문자열 s
가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
제한사항
- 1 ≤
s
의 길이 ≤ 10,000 s
는 영어 소문자로만 이루어져 있습니다.
입출력 예
s | result |
---|---|
"banana" | 3 |
"abracadabra" | 6 |
"aaabbaccccabba" | 3 |
입출력 예 설명
입출력 예 #1
s
="banana"인 경우 ba - na - na와 같이 분해됩니다.
입출력 예 #2
s
="abracadabra"인 경우 ab - ra - ca - da - br - a와 같이 분해됩니다.
입출력 예 #3
s
="aaabbaccccabba"인 경우 aaabbacc - ccab - ba와 같이 분해됩니다.
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
풀이
소요시간 20분
나의 정답 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(string s) {
int answer = 0;
vector<string> ans;
// x의 개수와 x가 아닌 개수가 같아 질 때 분리
string a;
char x;
int c_a=0;
int c_b=0;
for(auto c : s)
{
// a가 비어있을 때
if(a=="")
{
x=c;
a+=c;
c_a++;
}
else
{
// c_a와 값이 같다면 끝내야함.
if(x!=c)
{
c_b++;
a+=c;
}
else
{
c_a++;
a+=c;
}
if(c_a==c_b)
{
cout<<a<<" ";
answer++;
c_b=0;c_a=0;
a="";
}
}
}
if(a!="") answer++;
return answer;
}