콩부방
1675 : 시저의 암호 1 본문
728x90
암호학에서 시저 암호(Caesar cipher)는 가장 오래된 암호 중 하나이고, 가장 대표적인 대치(substitution) 암호로서 평문 문자를 다른 문자로 일대일 대응시켜 암호문을 만들어 낸다.
시저 암호는 알파벳을 3글자씩 밀려서 쓰면서 문장을 만들었다. 실제 시저는 부하인 브루투스에게 암살되기 전에 키케로에게 다음과 같은 암호문을 보냈다고 한다.
암호문 | qhyhu wuxvw euxwxv |
원문 | never trust brutus |
암호문을 원문으로 바꾸는 원리는 간단하다. 암호문에 쓰인 알파벳보다 3만큼 이동한 알파벳으로 치환하면 된다.
암호 | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | |
원문 | x | y | z | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w |
시저의 암호문이 입력되면 원문으로 복원하는 프로그램을 작성하시오.
입력
공백이 있는 영어 문자열이 최대 200글자 입력된다. 단, 공백과 알파벳 문자외에 다른 문자는 입력되지 않는다.
출력
암호문을 원문으로 복원하여 출력하시오.
입력 예시 예시 복사
qhyhu wuxvw euxwxv
출력 예시
never trust brutus
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//18자리 qhyhu wuxvw euxwxv
String a = sc.nextLine();
char[] b = a.toCharArray();
for (int i = 0; i < b.length; i++) {
if(b[i] != ' ') {
if(b[i]-3 < 97) {
switch(b[i]-3) {
case 96 : b[i]+=23;
break;
case 95 : b[i]+=23;
break;
case 94 : b[i]+=23;
break;
}//switch end
}else b[i]-=3;
}//if end
}
for (int i = 0; i < b.length; i++) {
System.out.print(b[i]);
}
}//main
}
728x90
'알고리즘 공부 > CodeUp' 카테고리의 다른 글
1295 : 알파벳 대소문자 변환 (0) | 2021.08.21 |
---|---|
1294 : 시저의 암호 2 (0) | 2021.08.21 |
1287 : 구구단을 *로 출력하기 (0) | 2021.08.21 |
1286 : 최댓값, 최솟값 (0) | 2021.08.21 |
1285 : 계산기 2 (0) | 2021.08.19 |
Comments