본문 바로가기
Develop/백준 (Cpp)

[백준] 9226번 : 도깨비말 (C++)

by Tarra 2023. 2. 16.

9226번 : 도깨비말


문제 )

도깨비말은 언어 유희 중 하나로, 글자를 특정 법칙에 따라 재구성하는 것을 말한다.

영어권에서는 피그라틴어라는 것이 있다. 주로 어린이들이 많이 쓰는 데, 남들에게 무슨 말인지 모르게 하기 위해 종종 쓴다. 

여기엔 규칙이 있는데, 맨 앞글자가 모음이 아닐때 까지 맨 앞 글자를 어미로 돌린 후 그 끝에 ay를 붙여서 완성한다. 예를 들면 frog는 ogfray이 된다. 만약 맨 앞자음이 없는 apple과 같은 경우는 끝에 ay만 붙여 appleay가 된다. 또는, 단어에 모음이 없는 경우에도 단어의 끝에 ay만 붙인다.

주어진 단어를 피그라틴어로 바꾸는 프로그램을 작성하시오.

 

 

입력 :

한 줄에 하나의 단어씩 주어진다. 그리고 마지막 줄에 #을 입력받고 끝낸다.

주어진 단어는 20자를 넘지 않고 공백없이 소문자로만 이루어져있다. 여기서 모음이란 'a', 'e', 'i', 'o', 'u' 를 말한다.

 

 

 

출력 :

한 줄에 하나씩 피그라틴어를 출력한다.

 

 

 

 

 

풀이)

자꾸 메모리 초과가 떠서 

 

이유가 대체 뭘까 고민이 많이 되었던 문제이다.

 

메모리 초과가 났던 이유는 모음을 발견하지 못했을 경우 계속해서 while문이 돌아

 

word의 길이를 늘려갔고 이 때문에 났던 것이었다.

 

따라서 모음이 하나도 발견되지 않았을 경우를 따로 분기처리하여 마지막에 발견되지 않았을 경우 

 

초기에 저장해놨던 문자열의 길이대로 출력해주었다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
 
    while (1)
    {
        string word;
 
        cin >> word;
        if (word == "#"break;
        
        // 피그라틴어 만들기
        int start = 0;
        bool flag = 0;
        int word_len = (int)word.length();
        while (1)
        {
            if (start > word_len + 1)
            {
                flag = 1;
                break;
            }
            if (word[start] == 'a' || word[start] == 'e' || word[start] == 'i' || word[start] == 'o' || word[start] == 'u'break;
            else 
            {
                word += word[start];
                start++;
            }
        }
 
        // 모음이 하나도 안 발견된 경우
        if (flag)
        {
            for (int i = 0; i < word_len; i++)
            {
                cout << word[i];
            }
        }
        else 
        {
            int len = (int)word.length();
            for (int i = start; i < len; i++)
            {
                cout << word[i];
            }
        }
 
        cout << "ay\n";
    }
 
    return 0;
}
cs

출처 : https://www.acmicpc.net/problem/9226 

 

9226번: 도깨비말

도깨비말은 언어 유희 중 하나로, 글자를 특정 법칙에 따라 재구성하는 것을 말한다. 영어권에서는 피그라틴어라는 것이 있다. 주로 어린이들이 많이 쓰는 데, 남들에게 무슨 말인지 모르게 하

www.acmicpc.net

 

'Develop > 백준 (Cpp)' 카테고리의 다른 글

[백준] 2703번 : Cryptoquote (C++)  (0) 2023.02.17
[백준] 8932번 : 7종 경기 (C++)  (0) 2023.02.17
[백준] 5724번 : 파인만 (C++)  (0) 2023.02.16
[백준] 1568번 : 새 (C++)  (0) 2023.02.15
[백준] 2556번 : 별 찍기 - 14 (C++)  (0) 2023.02.15