본문 바로가기

옛날

[7d] 카이사르 암호 (caesar cipher)

카이사르 암호는 암호화 방법 중 하나로서 몇 칸을 뛰어 나중 문자로 암호화하는 방법이다. 예를 들어, 한 칸 나중 문자로 암호화할 경우 "attack at dawn"을 "buubd!bu!ebxo"로 암호화할 수 있다. a 다음의 문자가 b이며, 아스키코드 표의 빈칸 다음 문자가 !이기 때문이다. 이 방법에서는 몇 칸을 건너 뛸 것인가가 바로 암호를 풀 수 있는 키(Key)라 할 수 있다. 키와 문자열을 입력받아 그것을 암호화하는 프로그램을 작성해보자. 단, 프로그램은 한 번만 실행된다.


출력 예 )

> Enter the key.

> 3(Enter)

> Enter the text.

> I like spring(Enter)

> The cipher text is, L#olnh#vsuqj.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
 
int main() {
 
    int n;
    char c[100];
 
    printf("Enter the key.\n");
    scanf("%d%*c"&n);
 
    printf("Enter the text.\n");
    gets(c);
 
    for (int i = 0; i < 100; i++) {
 
        if (c[i] == NULL) {
            break;
        }
 
        c[i] += n;
        printf("%c", c[i]);
    }
 
    return 0;
}
cs

char형 배열의 특징과 더불어 char와 ASCII코드와의 연관을 잘 이해하고 있어야 하는 문제였다.

다음과 같은 참조 자료들을 통해 왜 gets함수를 사용하였으며, scanf에 %d%*c 와 같은 녀석을

썻는지 참고하자.


http://cokk.tistory.com/42



배열을 쓰지 않고도 풀 수 있는 문제엿다.

입력버퍼를 이용한다더라.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
int main() {
 
    int n;
    char ch;
 
    printf("Enter the key.\n");
    scanf("%d"&n);
 
    printf("Enter the text.\n");
    scanf("%c"&ch);
 
    printf("The cipher text is, ");
    while (ch != '\n') {
        printf("%c", ch + n);
        scanf("%c"&ch);
    }
 
    return 0;
}
cs


'옛날' 카테고리의 다른 글

[8d] 2839 : 설탕 배달  (0) 2018.04.14
ㅁㄴㅇ  (0) 2018.04.14
[6d] 10817 : 세 수  (0) 2018.04.11
[5d] 9498 : 시험 점수  (0) 2018.04.06
[4d] 11721 : 열 개씩 끊어 출력하기 (NEED FIX)  (0) 2018.04.05