본문 바로가기

Programming/algorithm

[algorithm] 문자열 암호화


4. 문자열 암호화

 

문제

특정 메시지를 암호화 하는 방법은 오랫 동안 다양하게 연구되었다.

그러한 방법들 중에서 가장 간단한 방법을 생각해보자.

특정 문자열을 입력받는다편의상 문자열에 공백은 없으며영문 대소문자가 입력으로 들어온다그러한 다음 문자열의 각 문자에 맨 왼쪽부터 하나씩 0, 1, 2, 3, ... 과 같이 번호를 매긴다.

만약 암호화 하려고 하는 문자열이 `HelloWorld' 가 들어왔을 경우다음과 같이 번호가 붙게 된다.

l

W

그 다음 짝수 번호(2로 나눠 떨어지는 숫자, 0도 짝수에 포함한다.) 가 붙은 문자들을 번호가 빠른 순으로 다음과 같이 붙이고그 다음 홀수 번호가 가 붙은 문자들을 번호가 빠른 순으로 그 뒤에붙인다위의 `HelloWorld'에 적용할 경우 결과는 다음과 같다.

HloolelWrd

문자열을 입력받은 다음위에 소개한 암호화를 수행하는 프로그램을 작성하라.


입력

입력의 첫번째 줄에는 테스트 케이스의 개수 T(1<=T<= 10)이 입력된다.

그 다음 줄 부터 T개의 줄에는 암호화를 하고자 하는 문자열이 입력된다문자열에는 공백이 포함되지 않으며문자열의 길이는 100자를 넘지 않는다.


출력

각 테스트 케이스의 순서대로 문자열을 암호화 한 결과를 한줄에 하나씩 출력한다.


예제 입력

2

A

HelloWorld


예제 출력

A

HloolelWrd


문제 풀이

Scanner보다는 byte로 읽어오는 BufferedReader가 속도가 빠르다.

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.Scanner;

 

public class Main {

public static void main(String[] argsthrows Exception {

// Scanner scanner = new Scanner(System.in);

// int testCnt = scanner.nextInt();

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

int testCnt = Integer.parseInt(br.readLine());

        

while (testCnt-- > 0) {

String input = br.readLine();

// String input = scanner.next();

String oddStr = ""evenStr = "";

 

char[] charArr = input.toCharArray();

for (int i = 0; i < charArr.lengthi += 2) {

oddStr += charArr[i];

if ((i + 1) < charArr.length){

evenStr += charArr[i + 1];

}

}

System.out.println(oddStr+evenStr);

}

}

}

문제 출처 : 링크




'Programming > algorithm' 카테고리의 다른 글

[algorithm] 상수  (0) 2016.03.08
[algorithm] KMP는 왜 KMP일까?  (0) 2016.03.08
[algorithm] 히스토그램  (0) 2016.03.04
[algorithm] 알파벳 찾기  (0) 2016.03.04
[algorithm] 알파벳 개수 구하기  (0) 2016.03.04