별의 공부 블로그 🧑🏻‍💻
728x90
728x170

문제

여기 구글에서, 최고의 언어인 구글語스를 소개합니다. 구글語스로 번역하기 위해, 저희들은 메시지의 각 영문자를 다른 영문자로 변환합니다. 이 변환은 일대일이고, 독립적인데, 그 말은 한 가지의 영문자는 항상 동일한 영문자로 변환되며, 서로 다른 영문자는 항상 다른 결과를 출력하게 됩니다. 이때 영문자는 변환 후에도 그대로일 수도 있으며, 공백(' ')은 항상 그대로 남게 됩니다.

예(라고 쓰는 단서)를 들면, 저희의 멋진 변환 알고리즘은 다음과 같은 변환 기능을 포함하고 있습니다:  'a' -> 'y', 'o' -> 'e', 그리고 'z' -> 'q'입니다. 이 말은 "a zoo"라는 문자열을 "y qee"로 변환하는 것을 의미합니다.

구글語스는 항상 최고의 변환 규칙을 가지고 있으며, 이 규칙은 항상 똑같습니다. 저희는 규칙을 바꿀 생각 또한 없습니다. 각각의 테스트 케이스에 대해서, 저희는 모든 변환 규칙을 보여주지 않을 생각입니다. 하지만 아래의 몇 가지 예시가 도움이 될 수도 있겠군요.

만약 구글語스로 되어 있는 문자열이 주어지면, 해석할 수 있나요?

 

입력

입력의 첫 번째 줄에는 테스트 케이스의 개수 T가 주어진다.

각 테스트 케이스는 한 줄의 문자열 G로 이루어지는데, 이 문자열은 'a'부터 'z'로 구성되어 있으며, 문자열의 시작과 끝에는 띄어쓰기(' ')가 없으며, 단어들 사이에는 단 한 개의 공백(' ')이 주어진다.

조건

  • 1 ≤ T ≤ 30.
  • 문자열 G는 최대 100개의 글자로 이루어져 있다.
  • 어떤 문자열도 일반적인 영어로 해석된다는 보장은 없다.

 


출력

각 테스트케이스에 대해 "Case #X: S"라는 형식에 맞추어 출력한다.

이때, X는 테스트케이스 순서이며, S는 문자열 G를 해석한 것이다.

 

 

예제 입력 1

 3

 ejp mysljylc kd kxveddknmc re jsicpdrysi

 rbcpc ypc rtcsra dkh wyfrepkym veddknkmkrkcd

 de kr kd eoya kw aej tysr re ujdr lkgc jv

 

예제 출력 1

 Case #1: our language is impossible to understand

 Case #2: there are twenty six factorial possibilities

 Case #3: so it is okay if you want to just give up



출처

Contest > Google Code Jam > Google Code Jam 2012 > Qualification Round A1번

· 문제의 오타를 찾은 사람: apjw6112 degurii

· 문제를 번역한 사람: guardian_demon

· 잘못된 번역을 찾은 사람: jh05013

 

 

채점

· 예제는 채점하지 않는다.

 

 

코드

 

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
57
58
59
60
#include <iostream>
#include <string>
#include <cstring>
 
using namespace std;
 
int main()
{
    int T;
    
    cin >> T;
    cin.ignore();
    
    // Repeat T times.
    for (int i = 0; i < T; i++) {
        string ary;
        
        getline(cin, ary);
        
        // Change letters in an array.
        for (int j = 0; j < ary.length(); j++) {
            if (ary[j] == 'a') ary[j] = 'y';
            else if (ary[j] == 'b') ary[j] = 'h';
            else if (ary[j] == 'c') ary[j] = 'e';
            else if (ary[j] == 'd') ary[j] = 's';
            else if (ary[j] == 'e') ary[j] = 'o';
            else if (ary[j] == 'f') ary[j] = 'c';
            else if (ary[j] == 'g') ary[j] = 'v';
            else if (ary[j] == 'h') ary[j] = 'x';
            else if (ary[j] == 'i') ary[j] = 'd';
            else if (ary[j] == 'j') ary[j] = 'u';
            else if (ary[j] == 'k') ary[j] = 'i';
            else if (ary[j] == 'l') ary[j] = 'g';
            else if (ary[j] == 'm') ary[j] = 'l';
            else if (ary[j] == 'n') ary[j] = 'b';
            else if (ary[j] == 'o') ary[j] = 'k';
            else if (ary[j] == 'p') ary[j] = 'r';
            else if (ary[j] == 'q') ary[j] = 'z';
            else if (ary[j] == 'r') ary[j] = 't';
            else if (ary[j] == 's') ary[j] = 'n';
            else if (ary[j] == 't') ary[j] = 'w';
            else if (ary[j] == 'u') ary[j] = 'j';
            else if (ary[j] == 'v') ary[j] = 'p';
            else if (ary[j] == 'w') ary[j] = 'f';
            else if (ary[j] == 'x') ary[j] = 'm';
            else if (ary[j] == 'y') ary[j] = 'a';
            else if (ary[j] == 'z') ary[j] = 'q';
        }
        
        // Print the letters in an array.
        cout << "Case #" << i + 1 << ": ";
        for (int k = 0; k < ary.length(); k++) {
            cout << ary[k];
        }
        cout << endl;
        
    }
    
    return 0;
}






문자열 안의 내용들을 직접 바꾸는 방법으로 간단하게 풀었다.

시간 복잡도는 O(n²).

728x90
그리드형(광고전용)

'Problem Solving > BaekJoon Online Judge' 카테고리의 다른 글

[BOJ12791][C++] Starman  (0) 2018.10.01
[BOJ7567][C++] 그릇  (0) 2018.09.29
[BOJ7568][C++] 덩치  (0) 2018.09.29
[BOJ1978][C++] 소수 찾기  (0) 2018.09.15
[BOJ10174][C++] 팰린드롬  (0) 2018.09.08
[BOJ14490][C++] 백대열  (0) 2018.08.25
[BOJ14495][C++] 피보나치 비스무리한 수열  (0) 2018.08.24
[BOJ15552][C++] 빠른 A+B  (1) 2018.08.18
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖