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

[프로그래머스/C]프로그래머스 Level 1 : 옹알이 (2) C언어

by starfish22 2022. 10. 29.
728x90

▶문제 : 코딩 테스트 연습 - 옹알이 (2) | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

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

댓글