프로그래머스/lv1/140108. 문자열 나누기

SITY·2023년 9월 20일
0

Cpp_Algorithm

목록 보기
9/43

#include <string>
#include <vector>

using namespace std;

int solution(string s) {
    int fir = 0, sec = 0, cnt = 0, i = 0;
    while (s.size() && i < s.size()) {
        char x = s[0];
        s[i] == x ? fir++ : sec++;
        if (fir == sec) {
            s = s.substr(fir + sec);
            cnt++;
            i = fir = sec = 0;
            continue;
        } else if (s.size() <= 1) {
            cnt++;
            break;
        }
        i++;
    }
    if (fir != sec && s.size() <= i) cnt++;
    return cnt;
}

문제 그대로 첫 글자 x를 두고, 인덱스가 x라면 fir++, 아니라면 sec++로 증가하면서 처음으로 두 횟수가 같아지면 문자열을 잘라주고, 인덱스와 문자 개수를 세는 변수들을 0으로 초기화 해준 뒤 continue로 빠져나간다.
만약 s의 길이가 1 이하라면 문자열을 자르는 대신 cnt를 올린 후 while문을 종료한다.

반복문이 종료되었을 때 마지막 조건에 해당되어서 cnt가 올라간 지 여부를 모르기 때문에 다시 한번 확인해준다.
(만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.)
fir와 sec이 다르고 s의 사이즈가 i 이하라면 마지막으로 cnt를 올려준다. 그리고 cnt를 return해준다.

마지막 조건을 체크하는 걸 깜빡해서 시간을 좀 날렸다,, 문제를 제대로 읽고 그대로 구현하는 것이 중요하다고 생각했다.

profile
·ᴗ·

0개의 댓글