문자열(String)

백준 9933번: 민균이의 비밀번호

cepiloth 2018. 6. 29. 12:39
반응형

https://www.acmicpc.net/problem/9933


1. 문제

창영이는 민균이의 컴퓨터를 해킹해 텍스트 파일 하나를 자신의 메일로 전송했다. 파일에는 단어가 한 줄에 하나씩 적혀있었고, 이 중 하나는 민균이가 온라인 저지에서 사용하는 비밀번호이다. 파일을 살펴보던 창영이는 모든 단어의 길이가 홀수라는 사실을 알아내었다. 그리고 언젠가 민균이가 이 목록에 대해서 얘기했던 것을 생각해냈다. 민균이의 비밀번호는 목록에 포함되어 있으며, 비밀번호를 뒤집어서 쓴 문자열도 포함되어 있다. 예를 들어, 민균이의 비밀번호가 "tulipan"인 경우에 목록에는 "napilut"도 존재해야 한다. 알 수 없는 이유에 의해 모두 비밀번호로 사용 가능하다고 한다. 민균이의 파일에 적혀있는 단어가 모두 주어졌을 때, 비밀번호의 길이와 가운데 글자를 출력하는 프로그램을 작성하시오.


2. 알고리즘

키워드 - 문자열 처리


문자열이 하나만 들어올수도 있다. 이거 찾느라고 암걸리는 줄.

전체적인 문자열은 현재 문자열과 비교대상할 문자열을 reverse 하여 비교 한다.


3. 코드


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
#include <iostream>
#include <sstream>
#include <string>
#include <algorithm>
#include <functional>
#include <vector>
#include <list>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <stack>
#include <cstring>
using namespace std;
 
#define MAX_SIZE 100
#define INF 0x7fffffff
 
/*
* @memory  - 1192 kb
* @time    - 8 ms
*/
int main() {
 
    cin.tie(0);
    std::ios::sync_with_stdio(false);
 
    int n; cin >> n;
 
    vector<string> arr(n);
    for(int i=0; i<n; i++) {
        cin >> arr[i];
    }
 
    string sol("");
    for(int i=0; i<n; i++) {
        
        for(int j=i; j<n; j++) {    
            string cand = arr[j];
            reverse(cand.begin(), cand.end());
            
            if (arr[i] == cand) {
                sol.clear();
                sol = cand;
                break;
            }
        }
    }
 
    const int size = sol.size() / 2;
    cout << sol.size()  << " " << sol[size] << "\n";
    return 0;
}
 
cs

반응형