문자열 나누기 (자바)

김재현·2023년 12월 1일
0

알고리즘 풀이

목록 보기
40/90
post-thumbnail

문제

업로드중..

정답 코드

class Solution {
    public int solution(String s) {
        int answer = 1;

        char initChar = s.charAt(0);
        int repeatCnt = 0;

        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == initChar) {
                repeatCnt++;
            } else {
                repeatCnt--;
                if (repeatCnt == 0) {
                    if (i + 1 < s.length()) {
                        initChar = s.charAt(i + 1);
                        answer++;
                    }
                }
            }
        }

            return answer;
        }

}

첫 문자를 initChar에 담아놓고 그 뒤에 오는 문자들을 비교하며 반복 횟수를 비교한다.
reatCnt가 0이 되면 시작 문자의 개수와 다른 문자의 개수가 같아지는 것 이므로,
(다음 문자가 있다면)initChar를 다음 문자로 지정하고, 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;
    }
}

개념은 똑같다. 다만 repeatCnt 대신 --하는 대신 횟수를 직접 세주었다.

profile
I live in Seoul, Korea, Handsome

0개의 댓글