https://www.acmicpc.net/problem/9933
< 민균이의 비밀번호 >
민균이의 텍스트 파일에 들어 있는 문자열 중에 거꾸로 된 문자열도 함께 존재하는 경우 그것을 비밀번호라고 한다.
예를 들어 power가 비밀번호라면, rewop도 있다는 뜻이다. 중복된 답은 나오지 않는다고 했으므로 비밀번호 발견 시 바로
답을 출력해주면 된다.
이 문제의 경우 set을 이용했다.
n번 반복문을 돌면서 입력받은 문자열을 set에 추가해준 뒤 입력받은 문자열을 뒤집어서 set에 존재하는지를 체크해주었다.
set의 find 함수를 이용하였는데, find함수의 경우 set에서 찾고자 하는 문자열을 찾지 못했을 때 end()를 리턴한다.
따라서 set.find(문자열) != set.end() 일 때의 문자열을 찾아 답을 출력해주면 된다.
#include <iostream> #include <string> #include <algorithm> #include <set> using namespace std; set<string> v; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; string result; for (int i = 0; i < n; ++i) { string s; cin >> s; v.insert(s); for (int j = 0; j < s.size() / 2; ++j) { char temp = s[j]; s[j] = s[s.size() - 1 - j]; s[s.size() - 1 - j] = temp; } if (v.find(s) != v.end()) { result = s; break; } } cout << result.size() << " " << result[result.size() / 2]; return 0; }< C로 푼 풀이 >
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> char str[101][15]; int main() { int n; scanf("%d", &n); int iSize = 0; int flag = 0; for (int i = 0; i < n; ++i) { char temp[15]; scanf("%s", temp); strcpy(str[i], temp); int tSize = strlen(temp); for (int j = 0; j < tSize / 2; ++j) { char t = temp[j]; temp[j] = temp[tSize - 1 - j]; temp[tSize - 1 - j] = t; } for (int j = 0; j <= i; ++j) { if (!strcmp(temp, str[j])) { printf("%d %c\n", tSize, temp[tSize / 2]); flag = 1; break; } } if (flag) break; } return 0; }
'알고리즘 > 백준 문제풀기' 카테고리의 다른 글
BOJ 백준 2162 선분 그룹 <선분 교차> (0) | 2019.01.09 |
---|---|
BOJ 백준 2857 FBI <문자열 처리> (0) | 2019.01.06 |
BOJ 백준 1764 듣보잡 <문자열 처리> (0) | 2019.01.03 |
BOJ 백준 1032 명령 프롬프트 <문자열 처리> (0) | 2019.01.02 |
BOJ 백준 크로아티아 알파벳 <문자열 처리> (0) | 2019.01.02 |