Computer/Algorithm

Daily Algorithm - 비밀편지

kentakang 2018. 5. 28. 17:15
반응형

문제

셀던과 레오나드는 암호화화여 문자를 주고 받았다.

암호화하는 방법은 숫자 S 만큼 알파벳을 이동하는 대치 문자를 이용하였다. (알파벳은 대문자만 사용)

여기서 S를 구하는 방법은 S = 3P + K 이다.

K는 입력으로 주어지고, P는 문자열의 각 자릿수값이다.

예를 들어, K=3이고, ZOOM이라는 문자를 암호화한다면,

S = 3*1 + 3 = 6 , Z ==> F

S = 3*2 + 3 = 9 , O ==> X

S = 3*3 + 3 = 12 , O ==> A

S = 3*4 + 3 = 15 , M ==> B

이다.

이 문제에서는 암호화된 문자를 원문으로 바꾸는 것이 문제이다.

즉, 암호문 FXAB가 입력되면 원문 ZOOM을 출력해야한다.

입력

첫째줄에 K값이 입력된다. (K < 10)
둘째줄에 20글자이내의 대문자로 이루어진 알파벳이 입력된다.

출력

원문을 출력한다.

예제 입력

3 FXAB

예제 출력

ZOOM

풀이

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

int main()
{
int k;
char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char str[20];

scanf("%d", &k);
scanf("%s", str);

for (int i = 1; i <= strlen(str); i++)
{
int s = (3 * i) + k;
char * pch = strchr(alphabet, str[i - 1]);
int n = pch - alphabet - s;

if (n < 0)
n += 26;

printf("%c", alphabet[n]);
}
}


이런 종류의 문제는 문자열 제어가 어려운 C언어보다 Java나 Python 같은 언어로 해결하는게 속편하다.


문제 출처 : http://codeup.kr/JudgeOnline/problem.php?id=2002


반응형