문제출처: https://www.acmicpc.net/problem/2703
문제
Cryptoquote는 어떤 메시지가 있을 때, 각 알파벳을 다른 알파벳으로 변환해 암호화 하는 방법이다.
예를 들어, HPC PJVYMIY란 메시지가 있을 때, 이를 원래 메시지로 바꾼다면 ACM CONTEST가 된다.
위의 예를 바꾸는 규칙은 H=A, P=C, C=M, J=O, V=N, Y=T, M=E, I=S이다. 이처럼 Cryptoquote를 하려면, 문자와 문자 사이의 규칙이 있어야 한다.
암호화된 메시지와 문자와 문자 사이의 규칙이 주어졌을 때, 이를 원래 메시지로 바꾸는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1000)가 주어진다. 각 테스트 케이스는 다음과 같이 두 줄로 구성되어 있다.
테스트 케이스의 첫째 줄에는 암호화된 메시지가 주어지고, 둘째 줄에는 변환 규칙이 주어진다. 변환 규칙은 알파벳 대문자 26글자로 이루어져있고,
첫 번째 문자는 A에 해당하는 문자, 두 번째는 B, ..., 26번째는 Z에 해당하는 문자이다. 변환 규칙은 중복되지 않는다. 암호화된 메시지에는 공백이 있을 수 있고, 이것은 원래 메시지에도 포함되어야 한다.
출력
각 테스트 케이스에 대해서 한 줄에 하나씩 원래 메시지를 출력한다.
풀이
1.입력받을 bef, 변경된 알파벳의정보를 저장할 aft string을 선언한다.
2. bef[0]은 aft문자열에서 알파벳bef[0]의 인덱스를 갖는 알파벳으로 변한다.
주의:n을 입력받고 버퍼에남은 개행문자를 지우고 문자열을 입력받아야한다.
코드
#include<iostream> #include<vector> #include<string> using namespace std; int main() { int n; cin >> n; cin.ignore(); for (int i = 0; i < n; i++) { string bef, aft; getline(cin, bef); getline(cin, aft); int size = bef.size(); for (int i = 0; i < size; i++) { if (bef[i] == ' ') cout << " "; else { cout << aft[bef[i] - 'A']; } }cout << endl; } }
결과
'문제풀이(BOJ) > 문자열' 카테고리의 다른 글
[백준 9226] 도깨비말 (0) | 2019.12.06 |
---|---|
[백준 1431] 시리얼 번호 (0) | 2019.12.04 |
[백준 11536] 줄 세우기 (0) | 2019.12.02 |
[백준10174] 팰린드롬 (0) | 2019.12.02 |
[백준2935]소음 (0) | 2019.12.01 |