d

'ENCRPTY'에 해당되는 글 1건

문제

특정 메시지를 암호화 하는 방법은 오랫 동안 다양하게 연구되었다.

그러한 방법들 중에서 가장 간단한 방법을 생각해보자.

특정 문자열을 입력받는다. 편의상 문자열에 공백은 없으며, 영문 대소문자가 입력으로 들어온다. 그러한 다음 문자열의 각 문자에 맨 왼쪽부터 하나씩 0, 1, 2, 3, ... 과 같이 번호를 매긴다.

만약 암호화 하려고 하는 문자열이 `HelloWorld' 가 들어왔을 경우, 다음과 같이 번호가 붙게 된다.

0 1 2 3 4 5 6 7 8 9
H e l l o W o r l d

그 다음 짝수 번호(2로 나눠 떨어지는 숫자, 0도 짝수에 포함한다.) 가 붙은 문자들을 번호가 빠른 순으로 다음과 같이 붙이고, 그 다음 홀수 번호가 가 붙은 문자들을 번호가 빠른 순으로 그 뒤에붙인다. 위의 `HelloWorld'에 적용할 경우 결과는 다음과 같다.

HloolelWrd

문자열을 입력받은 다음, 위에 소개한 암호화를 수행하는 프로그램을 작성하라.

 

입력

입력의 첫번째 줄에는 테스트 케이스의 개수 T(1<=T<= 10)이 입력된다.

그 다음 줄 부터 T개의 줄에는 암호화를 하고자 하는 문자열이 입력된다. 문자열에는 공백이 포함되지 않으며, 문자열의 길이는 100자를 넘지 않는다.

 

출력

각 테스트 케이스의 순서대로 문자열을 암호화 한 결과를 한줄에 하나씩 출력한다.

 

예제 입력

2
A
HelloWorld

예제 출력

A
HloolelWrd

어렵지 않게 풀어낼 수 있는 문제입니다. 문제에 나와 있는 대로 생각하여 풀 수도 있으나 좀 더 간소화 할 수 있는 방법으로 풀어봤습니다.

 

문자열을 받아서 짝수 인덱스를 출력하고, 홀수 인덱스를 출력하면 올바른 출력이 나옵니다.

 

문자열은 문자열 마지막에 '\0'이 입력됨으로 써 문자열의 끝을 알 수 있습니다. 따라서 주의해야 할 점은 문자열의 최대 길이가 100인 경우 101 자리에 '\0' 을 가져야 하므로 명시된 최대 길이 + 1 이상으로 잡아 두셔야 올바른 코딩이 가능합니다.

 

 

대체적으로 비슷한 형태 였으나 독특한 소스가 있어 한번 살펴보았습니다.

 

256 크기의 배열을 하나 만든 다음 포인터 char 형 변수 e, o 를 만들어 짝수와 홀수의 문자를 출력하기 위한 위치를 잡아뒀네요.

 

짝수의 이진수는 첫 자리가 0 이고 홀수는 1 인 것에 감안해서 i & 1 로 짝수와 홀수를 구분하였습니다. 그렇게 해서 짝수와 홀수를 구분하여 문자열을 집어 넣고 최종적으로 출력을 하였습니다.

'알고리즘 > Algospot' 카테고리의 다른 글

튜토리얼 [LECTURE]  (0) 2016.07.08
블로그 이미지

_Able

,