
내가 작성한 코드
class Solution {
public int solution(String s) {
StringBuilder sb = new StringBuilder(); // 최종 문자열 비교를 위한 StringBuilder
int answer = 0;
int same = 0; // 첫글자와 같은 개수
int different = 0; // 첫글자와 다른 개수
char firstChar = s.charAt(0);
for(int i = 0; i < s.length(); i++) {
// 현재 문자와 첫번째 문자 비교
if(firstChar == s.charAt(i)) {
same++;
} else {
different++;
}
// 같은 문자와 다른 문자의 개수가 같아지면
if(same == different) {
String cut = s.substring(i - different - same + 1, i + 1); // 잘라낸 문자열
sb.append(cut); // StringBuilder에 추가
answer++;
// 카운트 초기화
same = 0;
different = 0;
// 다음 문자로 첫글자 변경
if(i + 1 < s.length()) {
firstChar = s.charAt(i + 1);
}
}
}
// 길이가 다름 >> 따로 노는 문자열 존재 >> 마지막에 추가가
return sb.length() == s.length() ? answer : answer + 1;
}
}
다른 사람의 코드
class Solution {
public int solution(String s) {
char prev = '1';
int same = 0, different = 0, answer = 0;
for (char c : s.toCharArray()) {
// 첫글자일 경우
if (prev == '1') {
prev = c;
same++;
answer++; // 문자열 시작시 카운트 증가
} else if (prev == c) {
same++;
} else {
different++;
}
if (same == different) {
prev = '1';
same = 0;
different = 0;
}
}
return answer;
}
}
- 나는 문자열을 끊은 뒤에
answer
을 증가시켰다면 다른 사람은 문자열 시작시에 증가시킴 → 내 코드의 마지막 문자열끼리의 검증을 없앨 수 있음
Share article