문자열(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 |
반응형