Programming/algorithm

[algorithm] 문자열 암호화

성일만 2016. 3. 5. 21:36


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