문제출처: 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

+ Recent posts