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 같은 언어로 해결하는게 속편하다.
반응형