백준 14584 암호 해독 문제이다.
로직을 생각해내는데는 시간이 오래 걸리지 않았다.
모두 대조해보고 부분 문자열이 존재하는가?로 판별하면 됐는데..
왜인지 계속 틀렸다고 나왔다. 로직은 완벽한것같은데?
알고보니 내가 직접 만든 substring 판별 함수가 문제였고
cpp find 함수를 찾아 조건문을 고쳐주니 바로 맞을 수 있었다.
찾을 문자열.find(찾고자 하는 문자열) != string::npos
여기서 string::npos는 찾는 문자열이 없을 경우 반환되는 값이다.
만약 substring이 존재한다면 인덱스의 첫번째값을 반환해준다.
코테에서 만약 이런일이 있었다고 생각하면 끔찍하다.. stl의 사용을 익혀야겠다.
#include <iostream>
using namespace std;
string arr[100];
int n;
string decode(string s, int num) {
string result = "";
for (int i = 0; i < s.length(); i++) {
if (s[i] + num >= 'z') {
result += (char)(s[i] + num - 'z' + 'a');
} else {
result += s[i] + num + 1;
}
}
return result;
}
int main() {
string s;
cin >> s;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
for (int i = 0; i <= 'z' - 'a'; i++){
string decoded = decode(s, i);
for (int j = 0; j < n; j++) {
if (decoded.find(arr[j]) != string::npos) {
cout << decoded;
return 0;
}
}
}
}