*문제 출처는 프로그래머스에 있습니다.
문제 제목: 문자열 나누기 (1단계)
문제 사이트: https://school.programmers.co.kr/learn/courses/30/lessons/120817
문제 설명
문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.
만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
제한 사항
- 1 ≤ s의 길이 ≤ 10,000
- s는 영어 소문자로만 이루어져 있습니다.
입출력 예
입출력 예 설명
나의 풀이
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
int answer = 0;
int count_f = 0, count_s = 0;
vector<char> alpha;
for (int i = 0; i < s.size(); i++) {
alpha.push_back(s[i]);
if (alpha.size() >= 2) {
count_f = 0;
count_s = 0;
for (int j = 0; j < alpha.size(); j++) {
if (alpha[0] == alpha[j]) count_f += 1;
else if (alpha[0] != alpha[j]) count_s += 1;
if (count_f == count_s) {
answer += 1;
alpha.clear();
break;
}
}
}
}
if (!alpha.empty()) answer += 1;
return answer;
}
※ 알아야 할 것
중첩 for문은 최대한 사용하지 않는 것이 좋다.
'코딩테스트(프로그래머스 & 백준) > 프로그래머스-C++' 카테고리의 다른 글
Programmers / 문자열 내 마음대로 정렬하기 / C++ (0) | 2024.01.24 |
---|---|
Programmers / 행렬의 덧셈 / C++ (0) | 2024.01.22 |
Programmers / 정수 내림차순으로 배치하기 / C++ (0) | 2024.01.16 |
Programmers / 정수 제곱근 판별 / C++ (0) | 2024.01.16 |
Programmers / 같은 숫자는 싫어 / C++ (0) | 2024.01.15 |