์ƒˆ์†Œ์‹

์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ชจ์Œ์‚ฌ์ „ C++

  • -
728x90

 

1. ๋ฌธ์ œ

 

์‚ฌ์ „์— ์•ŒํŒŒ๋ฒณ ๋ชจ์Œ 'A', 'E', 'I', 'O', 'U'๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”, ๊ธธ์ด 5 ์ดํ•˜์˜ ๋ชจ๋“  ๋‹จ์–ด๊ฐ€ ์ˆ˜๋ก๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ „์—์„œ ์ฒซ ๋ฒˆ์งธ ๋‹จ์–ด๋Š” "A"์ด๊ณ , ๊ทธ๋‹ค์Œ์€ "AA"์ด๋ฉฐ, ๋งˆ์ง€๋ง‰ ๋‹จ์–ด๋Š” "UUUUU"์ž…๋‹ˆ๋‹ค.

๋‹จ์–ด ํ•˜๋‚˜ word๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ด ๋‹จ์–ด๊ฐ€ ์‚ฌ์ „์—์„œ ๋ช‡ ๋ฒˆ์งธ ๋‹จ์–ด์ธ์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

2. ์ฝ”๋“œ

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<string> nums;
string aeiou[5]={"A","E","I","O","U"};

void repeatPermutation(string s, int maxLength)
{
    if(maxLength==s.size()) //๋ฌธ์ž์—ด์˜ ํฌ๊ธฐ == ์ฑ„์šธ ๋ฌธ์ž์—ด ํฌ๊ธฐ
    {
        nums.push_back(s);
        return; //์žฌ๊ท€ํ•จ์ˆ˜ ์ข…๋ฃŒ
    }
    
    for(int i=0;i<5;i++){
        repeatPermutation(s+aeiou[i],maxLength); //์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ
    }
}

int solution(string word) {
    int answer = 0;
    
    for(int i=1;i<=5;i++){
        repeatPermutation("",i);
    }
    
    sort(nums.begin(), nums.end());  

    for(int i=0;i<nums.size();i++){
        if(word==nums[i]){
            answer=i;
            break;
        }
    }
       
    return answer+1;
}

 

3. ํ•ด์„ค

vector<string> nums;
string aeiou[5]={"A","E","I","O","U"};

void repeatPermutation(string s, int maxLength)
{
    if(maxLength==s.size()) //๋ฌธ์ž์—ด์˜ ํฌ๊ธฐ == ์ฑ„์šธ ๋ฌธ์ž์—ด ํฌ๊ธฐ
    {
        nums.push_back(s);
        return; //์žฌ๊ท€ํ•จ์ˆ˜ ์ข…๋ฃŒ
    }
    
    for(int i=0;i<5;i++){
        repeatPermutation(s+aeiou[i],maxLength); //์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ
    }
}

int solution(string word) {
    int answer = 0;
    
    for(int i=1;i<=5;i++){
        repeatPermutation("",i);
    }

์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 1์ž๋ฆฌ์ผ ๋•Œ, 2์ž๋ฆฌ์ผ ๋•Œ, 3์ž๋ฆฌ์ผ ๋•Œ, 4์ž๋ฆฌ์ผ ๋•Œ, 5์ž๋ฆฌ์ผ ๋•Œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ 1์ž๋ฆฌ์˜ ๊ฒฝ์šฐ

for(int i=0;i<5;i++){
        repeatPermutation(s+aeiou[i],maxLength); //์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ
}

์ด ๋ถ€๋ถ„์ด aeiou[0] ~aeiou[4] ๊นŒ์ง€์˜ ๊ฐ’์ด ํ•œ๋ฒˆ์”ฉ ํ˜ธ์ถœ ๋˜๋ฉด์„œ ๋๋‚ฉ๋‹ˆ๋‹ค.

2์ž๋ฆฌ์˜ ๊ฒฝ์šฐ ์œ„์˜ for๋ฌธ์ด aeiou[0]+aeiou[0]~aeiou[4] ์—์„œ๋ถ€ํ„ฐ aeiou[4]+aeiou[0]~aeiou[4] ๊นŒ์ง€ ๊ณ„์‚ฐํ•จ์œผ๋กœ ์ด 25๊ฐ€์ง€์˜ ๋ฌธ์ž์—ด์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ 5์ž๋ฆฌ์˜ ๊ฒฝ์šฐ๊นŒ์ง€ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. 

sort(nums.begin(), nums.end());  

    for(int i=0;i<nums.size();i++){
        if(word==nums[i]){
            answer=i;
            break;
        }
    }
       
    return answer+1;
}

๊ทธ ํ›„, ์‚ฌ์ „์  ๋ฐฐ์—ด๋กœ ๋‚˜์—ดํ•ด์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด์— ์ €์žฅ๋œ ๋ฐฐ์—ด์€ A,E,I,O,U,AA,AE,AI,AO,AU.... ๋“ฑ์˜ ์ˆœ์„œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.(ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋‚˜ (1์ž๋ฆฌ์ˆ˜...2์ž๋ฆฌ์ˆ˜...3์ž๋ฆฌ์ˆ˜.... ๋กœ ์ €์žฅ)

๊ธฐ๋ณธ์ ์œผ๋กœ sort ํ•จ์ˆ˜๋Š” string ๋ณ€์ˆ˜์—์„œ ์‚ฌ์ „์  ์ˆœ์„œ๋กœ ์ •๋ ฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ํŒ๋ณ„ ํ•จ์ˆ˜๋ฅผ ๋„ฃ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ ํ›„ for๋ฌธ์„ ํ†ตํ•ด ๋ฐ›์€ word ๊ฐ’๊ณผ nums[i]์˜ ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด ํ•ด๋‹น ๋ฒˆํ˜ธ๋ฅผ ๋ฝ‘์•„๋ƒ…๋‹ˆ๋‹ค.

๋ฒกํ„ฐ๋Š” 0๋ฒˆ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ์— +1์„ ํ•ด์ฃผ๋ฉด ๋ช‡๋ฒˆ์งธ ์ˆ˜์ธ์ง€๋ฅผ ๋„์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€ป for๋ฌธ์„ ์“ฐ์ง€ ์•Š๊ณ  find() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ํ•œ์ค„๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.