본문 바로가기
프로그래머스/C

[프로그래머스/C]프로그래머스 Level 1 : 문자열 나누기 C언어

by starfish22 2023. 4. 30.
728x90

▶문제 : 코딩테스트 연습 - 문자열 나누기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

▶코드 작성

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(const char *s) {
    int answer = 0;
    int count;
    for (int i = 0, j; s[i] != '\0'; i++) {//문자열이 끝날 때까지 반복
        if (s[i] == s[i + 1]) {//같은 문자가 나오면
            count = 2;//같은 문자 2번 나옴
            for (j = i + 2; s[j] != '\0'; j++) {
                if (s[i] == s[j]) count++;//같은 문자면 +1
                else {
                    count--;//다른 문자면 -1씩
                    if (count == 0) break;//같은 문자 개수 == 다른 문자 개수
                }
            }
            i = j;//j까지 탐색했으므로
        }
        else if (s[i + 1] != '\0') i++;//남은 문자가 하나가 아니면 i++
        answer++;
    }
    return answer;
}

 

▶해석

문자가 연속으로 나오면 count 변수를 이용하여

연속으로 나오는 문자가 다시 나오면 count++, 다른 문자가 나오면 count-- 해주었다.

count가 0이 되면 같은 문자가 나온 횟수가 다른 문자가 나온 횟수와 같아졌다는 것을 알 수 있다.

 

다른 문자가 나온다면 i++ 해주어 넘어갔다.

이때 s[i + 1] != '\0'은 문제에 나오는 두 번째 예시에서 마지막에 "a"하나만 남게 되므로

이 부분을 체크하지 않으면 i++ 했을 때 s[i]의 값이 '\0'가 아니라 쓰레기값이 나오는 듯하다.

728x90

댓글