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

[프로그래머스/C]프로그래머스 Level 2 : 모음 사전 C언어

by starfish22 2022. 2. 12.
728x90

▶문제 : 코딩 테스트 연습 - 모음 사전 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 모음사전

사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니

programmers.co.kr

 

▶코드 작성

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

int func(const char *word, int n)//n:문자를 검색할 배열자리
{
    char alpha[6] = {"AEIOU"};
    int cnt = 0;
    for (int i = 0; i < 5; i++)//alpha배열 반복
    {
        if (word[n] == alpha[i])//문자를 찾았을 때
        {
            if (word[n + 1] != '\0')//word[n] 다음 문자가 있다면
            {
                cnt += func(word, n + 1);//재귀함수 호출
            }
            cnt += 1;//자기자신 +1
            break;
        }
        else//찾는 문자가 아니면
        {
            for (int j = 0, d = 1; j < 5 - n; j++, d *= 5) {//배열 자리에 맞춰 5-n번 반복
                cnt += d;//경우의 수 더해줌
            }
        }
    }
    return cnt;
}

int solution(const char *word) {
    return func(word, 0);//word문자의 첫 번째 글자부터 확인
}

 

▶해석

재귀함수를 이용하여 배열의 자리에 맞춰 차례대로 검색하여 결과를 얻었다.

word문자의 첫 번째 문자 word [0]부터 시작하여 "AEIOU"중에서 앞에서부터 찾으면서 없을 시에 경우의 수를 따져 cnt에 더해주었다.

예를 들어,

word="E"일 때, 'A'부터 검색하여 없으면 'A', 'AA', 'AAA',,,'AUUUI', 'AUUUO', 'AUUUU'까지의 경우의 수를 cnt에 더해주어야 한다. 한 글자부터 시작하여 +1, 두 글자는 5, 세 글자는 5*5, 네 글자는 5*5*5, 다섯 글자는 5*5*5*5 모두를 더하면 앞자리가 'A'일 때의 모든 경우의 수가 나온다. 마지막으로 'E'를 찾았을 때 자기 자신을 +1 하면 결과가 나온다.

728x90

댓글