https://school.programmers.co.kr/learn/courses/30/lessons/140108
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문자열 s를 다음 규칙에 따라 여러 문자열로 분리하려고 합니다:
- 첫 글자를 기준으로 x로 정하고, 이를 포함한 횟수와 x가 아닌 글자의 횟수를 셉니다.
- 두 횟수가 같아지면 해당 부분 문자열을 분리합니다.
- 나머지 문자열에 대해 이 과정을 반복하며, 문자열이 없으면 종료합니다.
- 만약 두 횟수가 다르고 더 이상 읽을 글자가 없으면, 남은 부분을 하나로 분리합니다.
문자열 s가 주어졌을 때, 위 과정을 통해 분리된 문자열의 개수를 반환하는 함수를 구현해야 합니다.
풀이 방법
문자열이 공백이 될 때까지 다음 과정을 반복했습니다.
먼저 문자열의 첫 번째 글자를 first_word로 설정하고, 해당 글자의 개수를 first_num에,
다른 글자의 개수를 other_num에 각각 카운팅했습니다.
문자열을 순회하면서 두 개수가 같아지는 순간을 찾으면, 해당 부분 문자열을 잘라내고(s.erase),
나머지 문자열에 대해 동일한 작업을 반복했습니다.
만약 문자열 끝까지 갔을 때도 두 개수가 같아지지 않으면, 남은 문자열을 하나로 처리하고 카운트를 증가시켰습니다.
결과적으로 분리된 문자열의 개수를 answer로 반환했습니다.
풀이 코드
#include <string>
#include <vector>
using namespace std;
int first_num, other_num;
int solution(string s) {
int answer = 0;
while(!s.empty()){
char first_word = s[0];
for(int i=0; i<s.size(); i++){
if(s[i] == first_word) first_num++;
else other_num++;
if(first_num == other_num) {
s.erase(0,i+1);
answer++;
first_num = 0;
other_num = 0;
break;
}
if(i == s.size()-1) {
s.erase(0,i+1);
answer++;
}
}
}
return answer;
}
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] Lv.2 기능개발 c++ (0) | 2025.01.21 |
---|---|
[프로그래머스] Lv.3 베스트앨범 c++ (0) | 2025.01.21 |
[프로그래머스] Lv.1 신고 결과 받기 c++ (1) | 2025.01.20 |
[프로그래머스] Lv.1 달리기 경주 c++ (0) | 2025.01.20 |
[프로그래머스] Lv.2 의상 c++ (0) | 2025.01.19 |