본문 바로가기
내일배움캠프/Daily Routine (알고리즘)

[내일배움캠프] 알고리즘 Daily Routine 65. 문자열 나누기

by TIP__ 2024. 11. 15.

안녕하세요.
65회차 과제 문자열 나누기입니다.


문제

문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.
0
먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다.
이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다.
처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다.
s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다.

제한 사항

  • 1 ≤ s의 길이 ≤ 10,000
  • s는 영어 소문자로만 이루어져 있습니다.

풀이

class Solution {
    public int solution(String s) {
        char firstS = ' ';
        int answer = 0;
        int firstCnt = 0;
        int otherCnt = 0;
        for (int i=0; i<s.length(); i++) {
            // 첫 글자를 확인
            if(firstCnt == 0) {
                firstS = s.charAt(i);
                firstCnt++;
                continue;
            }

            // 두 번째 글자가 첫 글자와 같은지 확인
            // 같으면 firstCnt++, 다르면 otherCnt++
            if(firstS == s.charAt(i)) {
                firstCnt++;
            } else {
                otherCnt++;
            }

            // firstCnt와 otherCnt가 같은지 확인
            // 같으면 초기화하고 answer ++
            if(firstCnt == otherCnt) {
                firstCnt = 0;
                otherCnt = 0;
                answer++;
            }

        }
        // 짝이 맞지 않은 마지막 문자가 있는 경우 answer++
        if(firstCnt != otherCnt) {
            answer++;
        }
        return answer;
    }
}

 

 

다른 사람의 풀이

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;
    }
}

Learned

오늘도 너무 꼬아서 가는 부분이 없지않아 있던 것 같습니다.
언제쯤이면 길이 꼬이지 않고 쭉 펴질지... ㅠㅠ


저처럼 개발을 처음 접하시는 분들에게 이 글이 조금이나마 도움이 되길 바랍니다.

댓글