< 문제 >
-
개요
시저의 암호. 여러 가지 암호문 중에서 ‘시저의 암호’는 알파벳을 3자씩 건너 띄어 사용한다. 즉,
A -> D
B -> E
…
Y -> B
Z -> C
와 같이 바꾸어 쓰는 것이다. 이렇게 하면 THEY 가 WKHB 로 바뀌게 된다.
주어진 영어 문장을 시저의 암호로 바꾸도록 한다. 입력 받는 영어 문장은 대소문자를모두 받을 수 있지만, 시저의 암호에서는 모든 문자를 소문자로 취급한다. -
예상 결과
예상 결과는 하기 코드 실행시 예상되는 결과 값이다.
HelloWorld -> khoorzruog
< 정답풀이 >
public class Test01 {
private static final String result = "결과 : %s >> %s";
public static void main( String[] args ) {
// 시작시간 기록
long startTime = System.currentTimeMillis();
// STEP 1. TEST 데이터 준비
String original = "HelloWorld";
// STEP 2. 실행
String caesarStr = CaesarCode( original );
System.out.println( String.format( result, original, caesarStr ) );
// 종료시간 기록
long endTime = System.currentTimeMillis() - startTime;
System.out.println( "소요시간 : " + endTime + "ms." );
}
/**
*
* <PRE>
* 시저의 암호 방식으로 주어진 영어 문장을 변경한다
* </PRE>
*
* @param originalStr
* @return
*/
public static String CaesarCode( String originalStr ) {
char[] charArr = originalStr.toLowerCase().replace( " ", "" ).trim().toCharArray();
StringBuffer sb = new StringBuffer();
for ( char ch : charArr ) {
/*
* 해당 알파벳에서 3칸 뒤의 알파벳을 구한다.
* (알파벳은 26자리, 97은 소문자 a에 해당하는 ASCII CODE)
*/
int charCode = 97 + ((ch + 3 - 97) % 26);
sb.append( (char)(charCode) );
}
return sb.toString();
}