문제/프로그래머스

c++ 프로그래머스_"5주차_모음사전"

나 진짜 못차마 2023. 6. 15. 09:20
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/84512?language=javascript 

 

프로그래머스

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

programmers.co.kr

 

아에이오우

바베비보부

사세시소수

A E I O U 를 배열로 두고

그럼 A 의 index = 0

E 의 index = 1

J = 2

O = 3

U = 4

또 이 현재상태, 알파벳의 상태(index)를 저장하는 배열을

또 만들어 제일 처음 아무것도 없는

{-1 , -1 ,-1 ,-1 ,-1 } 다섯자리로 만들어줍니다

그리고 진행될 때마다 1 증가시켜주고

경우에 따라 빼주고 하면서

-1이 아닌 경우에만 거기에 해당하는 알파벳을 붙여

같다면 return 해줍니다.

코드에는 아무 것도 없는 " " 상태에 while 이 한번 돌아서 (answer++ 하기 때문에)

return 할 때 answer -1 을 해줍니다.

#include <string>
#include <vector>
#include <iostream>
using namespace std;

int solution(string word) {
    int answer = 0;
    char alphabet[] = { 'A','E','I','O','U' };
    int index[] = { -1,-1,-1,-1,-1 };
    
    int i = -1;
    while (1) {

        string str = "";
        for (int j = 0; j < 5; j++) {
            if (index[j] != -1) {
                str += alphabet[index[j]];
            }
        }
        if (str == word)
            break;

        if (i == 5) {
            i--;
            index[i]++;
            if (index[i] == 5) {
                while (index[i] == 5) {
                    index[i] = -1;
                    i--;
                    index[i]++;
                }
                i++;
            }
        }
        else {
            index[i]++;
            i++;
        }
        answer++;
    }
 

    return answer-1;
}

728x90