728x90
▶문제 : 코딩 테스트 연습 - 모음 사전 | 프로그래머스 (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
'프로그래머스 > C' 카테고리의 다른 글
프로그래머스 Level 2 : n^2 배열 자르기 C언어 (0) | 2022.02.19 |
---|---|
프로그래머스 Level 2 : 스킬트리 C언어 (0) | 2022.02.12 |
프로그래머스 Level 2 : 주식가격 C언어 (0) | 2022.02.04 |
프로그래머스 Level 2 : 큰 수 만들기 C언어 (0) | 2022.01.21 |
프로그래머스 Level 1 : 직사각형 별찍기 C언어 (0) | 2021.12.24 |
댓글