728x90
▶문제 : 코딩테스트 연습 - 문자열 나누기 | 프로그래머스 스쿨 (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
'프로그래머스 > C' 카테고리의 다른 글
프로그래머스 Level 1 : 덧칠하기 C언어 (0) | 2023.05.01 |
---|---|
프로그래머스 Level 1 : 공원 산책 C언어 (0) | 2023.04.30 |
프로그래머스 Level 1 : 바탕화면 정리 C언어 (0) | 2023.03.13 |
프로그래머스 Level 2 : 택배 배달과 수거하기 C언어 (0) | 2023.01.16 |
프로그래머스 Level 2 : 숫자 카드 나누기 C언어 (0) | 2022.12.19 |
댓글