보관함

JUNGOL 실력키우기 문자열 - 암호풀기(Message Decowding)

niamdank 2020. 2. 10. 10:42

기초 다지기에서 배운 내용을 응용하여 문제를 해결해야 하는 실력 키우기입니다.

실력 키우기는 비슷한 문제 유형별로 묶어서 풀어보겠습니다.

 

이번 포스팅에서는 문자열의 암호풀기 문제를 풀어보겠습니다.


1880 : 암호풀기(Message Decowding)

 

이 문제는 입력된 복호화 키를 값으로 하는 맵을 만들어 대치시켜주면 되는 간단한 문제입니다.

그런데 c++의 getline이 안먹어요. 심지어 이번에는 cin의 clear와 ignore 메소드를 넣어도 성공하지 못합니다.

 

#include <iostream>
#include <string>
#include <map>

using namespace std;

int main(void)
{
	string str;
	cin >> str;

	map<char, char> keyMap;
	char c{ 'a' };
	for (int i{ 0 }; c <= 'z'; ++i, ++c)
	{
		keyMap[c] = str[i];
	}

	cin.clear();
	cin.ignore(9999999, '\n');

	getline(cin, str);

	for (int i = 0; i < str.size(); ++i)
	{
		char c{ static_cast<char>(tolower(str[i])) };
		bool isCapital{ c != str[i] };

		str[i] = isCapital ? static_cast<char>(toupper(keyMap[c])) : keyMap[c];
	}

	cout << str << endl;
}

 

코드의 제출 결과는 다음과 같습니다.

 

이 문제도 문의를 넣고 결과가 나오면 포스팅하겠습니다.

 

http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1153&sca=2050

 

JUNGOL | 암호풀기(Message Decowding) > 문제은행

첫 줄에는 복호화 키가 26개의 소문자로 주어지고, 다음 줄에는 암호화 된 문자가 최대 80 문자로 입력된다.

www.jungol.co.kr