문제

문제 해석
1. 첫 글자를 읽는다.
2. 같음과 다름을 숫자로 기록하고
3. 문자열의 길이만큼 반복해서 읽는데
4. 읽어나가면서 일치,불일치를 횟수를 세고
5. 일치와 불일치가 같아지면 멈추고 분리한다.(실제로 분리는 안한다)
6. 다음 분리를 위해서 Answer에 분리횟수를 더하면서 일치 불일치 횟수를 초기화한다.
7. 문자열의 길이에 딱 맞게 분리될 수 있으므로 이를 고려해서 새로운 첫 문자를 갱신한다.
8. 문자열 순회가 끝나고 난 뒤, 일치와 불일치가 같지 않아 잘리지 않은 경우가 있을 수 있으므로 예외처리를 해준다.
코드
#include <string>
using namespace std;
int solution(string s) {
// 첫 글자를 읽고
char FirstAlphabet = s[0];
// 같음 / 다름을 저장하고
size_t Same = 0;
size_t Diff = 0;
// 문자열의 길이
size_t Length = s.length();
int Answer = 0;
for(int IDX = 0; IDX < Length; ++IDX)
{
// 읽어나가면서 일치여부에 따라 횟수를 세고
FirstAlphabet == s[IDX] ? ++Same : ++Diff;
// 처음 같아지는 경우 멈추고 분리한다.
if(Same == Diff)
{
// 다음 분리를 위해 더하고
Same = 0;
Diff = 0;
++Answer;
// 문자열의 길이에 딱 맞게 분리될 수 있으므로 그걸 고려해서 새로운 첫 문자를 갱신한다.
if(IDX + 1 < Length) FirstAlphabet = s[IDX + 1];
}
}
// 일치와 불일치가 같지 않아 잘리지 않은 경우에 대한 예외처리
if(0 < Same)
{
++Answer;
}
return Answer;
}
다른사람의 풀이
1. 반복문에서 예외처리를 하는 게 아니라 반복문 외부에서 예외처리 수행(이걸 보고 나도 변경했다.)
회고
1. 반복문의 외부에서 처리하면 되는 것에 대한 주의가 필요하다.