알고리즘

카이사르 암호 - JAVA CODE

체제 2021. 1. 11. 21:33

나 다시 자바 으쌰으쌰 한지 몇시간 되지도 않았는데 임무를 받았다,,,,

어떻게 해야할지 감이 안잡혀서 C 언어처럼 풀었다 ,,,,ㅋㅋ 

 

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !?. 

^ 이게 돌림판의 순환배열이고 KEY 값이 주어지면 그 값만큼 뒤로 넘어가서 암호를 해독하는 것이었다...! 

===============================================

<알고리즘>

- 돌림판 순환배열을 스트링 형태로 배열에 넣은 후 문자형_규칙_배열로 변환 

- 암호를 입력받아 그대로 배열에 넣은후 문자형_암호_배열로 변환

-반복문을 돌리며 규칙_배열과 암호_배열의 문자 값이 같을때를 찾고 

- 문자 값이 같으면 규칙_배열의 인덱스에 KEY 값을 더하여서 나온 값을 암호_배열에 대입

- 암호의 모든 문자가 끝날 때까지 같은 과정 반복 

===============================================

ArrayList를 사용 하라는 TIP 을 받았지만 아직 내 실력이 모자르기에 C 언어 방식으로 찬찬히 해보기로 했다 .!!

아자아자 !

 

1

주어진 돌림규칙을 rule 이라는 문자열로 지정했고

Scanner 클래스를 이용하여 원하는 값을 입력받았다 ( 암호 & KEY 값 )

* import java.util.* ; 추가하기 !!!!!!

 

 

2

돌림규칙과 입력받은 암호 모두 문자열 형태이기 때문에, 한문자씩 잘라야 문제를 해결할 수가 있다 !! (고 생각,,,) 

그렇기 때문에 문자열인 두개의 값을 한문자씩 쪼개 잘라서 저장할 CHAR 형 배열을 두개 생성했다 .

배열 생성

타입 [] 배열이름 = new 타입[크기]; 

배열의 크기는 작은 크기도 아니고, 입력값에 따라 달라질 수 있으므로 length() 메소드를 사용하였다 .

 

 

3

for 문을 사용하여서 각각 입력받은 암호 문장과, 규칙 문장을 한 문자씩 잘라 CHAR 형 배열에 저장하는 과정

charAt() 

String 으로 저장된 문자열 중 한글자만 선택에서 char 타입으로 바꿔주는 함수

참조변수.charAt() ; 

각 문장의 길이만큼 반복문을 돌리며 한글자씩 선택해서 char 형으로 바꿔 잘라주기!

 

 

4

이중 for 문을 사용하여 두개의 배열을 비교해가며 같은 문자가 나오는지 찾았다 

ex) HAPPY 라는 암호를 입력받으면 규칙배열 ABCD...에서 H를 찾고 -> A 찾고 ...

같은 문자를 찾으면 규칙에서 KEY 값 만큼 앞으로 가서 위치한 문자로 암호문자를 변경 

 

*여기서 %66을 한 이유는 ?*

KEY 값을 더했을때의 인덱스 값이 규칙 배열의 인덱스에서 벗어나게 되면 쓰레기값에 의해 오류가 발생한다.

array_rule[65] 인 ' . '  을 넘어가게 되면 다시 

array_rule[0] 인 'A' 로 돌아가야 하므로 나머지 연산자를 사용해준다 

EX) array_rule[66 % 66 ] 은 array_rule[0] 이므로 다시 순환 가능 

KEY 값 만큼 더한 값으로 암호 문자를 변경했으면 break 를 사용하여 반복을 그만두고 다음 문자로 고고

 

5

그렇게 한문자씩 KEY  값 만큼 더해진 문자를 for 문으로 출력하면 해독문 GET ☆

 

 

<< 전체 코드 >>

!!!!!!!!!!!!!!!!!!!!!성공 !!!!!!!!!!!!!!!!!!!