728x90
반응형

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

 

JUNGOL

 

www.jungol.co.kr

문제

최근 농부 창호에게서 메시지를 암호화(encryption)에 대해서 배운 소들은 너무나 신이 나있다. 

그들은 다른 농장의 소들과 미팅을 할 때 은밀한 메시지를 사용할 경우 이 방법을 사용할 수 있을 것이라고 생각했다. 

소들이 사용하는 암호화 방법은 복잡한 DES 혹은 BlowFish 와 같은 좋은 방법이 아니고 단순히 치환 하는 암호화 기법이다.

소들의 경우 복호화(암호를 해독함)하는 시간이 오래 걸리기 때문에, 

소들과 대화를 할 수 있는 당신에게 복호화 키와 암호 문자를 입력으로 받아 원문을 구하는 프로그램을 구현 해주기를 요청했다.

복호화 키는 26개의 소문자로 주어지며, a,b,c,d... 를 순서대로 복호화 키 문자로 대치한다는 것을 뜻한다.

 

예를 들어, 복호화 키가 "eydbkmiqugjxlvtzpnwohracsf" 와 같이 주어진다고 하자, 

그러면 이는 다음과 같다 - a 문자는 e, b 문자는 y, ..., z 문자는 f로 바꿔 준다.

암호화 된 문자는 대소문자 혹은 공백이 올수 있고 대문자는 대문자로 소문자는 소문자로 치환 규칙에 맞게 출력하고, 공백문자는 그대로 출력한다.

 

[그림1] 입 출력 예제

 

 

# include <stdio.h>
# include <string.h>

int main()
{
	char key[27];
	char dec[81],enc[81]; // 복호화 암호화 
	int i;
	
	scanf("%s %[^\n]s",key,enc);
	
	for(i = 0; i<strlen(enc)-1; i++)
	{
		if(enc[i] == ' ')
		{
			dec[i] = ' ';
			continue;
		}
		else if(enc[i] >= 65 && enc[i]<= 90)
		{
			dec[i] = key[enc[i]-65]-' ';
		}
		else if(enc[i] >= 97 && enc[i]<= 122)
		{
			dec[i] = key[enc[i]-97];
		}
	} 
	dec[i] = 0;
	printf("%s",dec);
	
	
	return 0;
}
728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기