728x90
▶문제 : 코딩 테스트 연습 - 옹알이 (2) | 프로그래머스 스쿨 (programmers.co.kr)
▶코드 작성
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
int solution(const char *babbling[], size_t babbling_len) {
char str[4][4] = {"aya", "ye", "woo", "ma"};
int answer = 0;
int index, j, same;
bool t;
for (int i = 0; i < babbling_len; i++) {
t = true; //초기화
index = 0;
same = -1;
while (t) {
for (j = 0; j < 4; j++) {//str배열에서 같은 문자 찾기
if (!strncmp(babbling[i] + index, str[j], strlen(str[j])) && same != j) {
index += strlen(str[j]);//찾은 문자길이만큼 넘어가기
same = j;//중복 방지
break;
}
}
if (babbling[i][index] == '\0') break;//끝까지 가면 종료
if (j == 4) t = false;//같은 문자를 못찾으면 종료
}
if (t) answer++;
}
return answer;
}
▶해석
조카가 발음할 수 있는 네 가지 발음을 str배열에 입력하였다.
for문을 돌려서 그 안에 while문으로 babbling [i] 문자를 끝까지 탐색하도록 하였다.
while문 안에 다시 for문으로 str배열에 있는 문자와 같은지 판별하고
같은 문자가 반복되면 안 되므로 same!=j를 추가하였다.
이때 babbling [i]+index는 index값에 따라 다음 문자로 넘어가는데 예를 들면
index=0 일 때 babbling [i]+index 가 "ayaye"라고 한다면
str에서 "aya"를 찾아내어 index+=3 이 된다.
그럼 babbling [i]+index는 "ye"가 된다.
이런 식으로 다시 "ye"를 찾으면 index+=2 가 되어 babbling [i][index]=='\0'으로 끝까지 탐색한 것을 알 수 있다.
만약 같은 문자를 찾지 못하거나 반복된다면 j는 4가 되므로 t=false를 대입한다.
따라서 t==true 일 때 babbling [i] 문자가 조건에 적합하므로 더해준다.
728x90
'프로그래머스 > C' 카테고리의 다른 글
프로그래머스 Level 2 : 야간 전술보행 C언어 (0) | 2022.10.31 |
---|---|
프로그래머스 Level 1 : 햄버거 만들기 C언어 (0) | 2022.10.29 |
프로그래머스 Level 1 : 숫자 짝꿍 C언어 (0) | 2022.10.28 |
프로그래머스 Level 1 : 콜라 문제 C언어 (0) | 2022.10.24 |
프로그래머스 Level 1 : 삼총사 C언어 (0) | 2022.10.24 |
댓글