12. 암호
A가 B에게 보낸 신호를 해석해주는 프로그램
비밀편지는 알파벳 한 문자마다 # 또는 *이 일곱 개로 구성되어 있습니다.
1. #은 이진수의 1로, *은 이진수의 0으로 변환합니다.
2. 바뀐 2진수를 10진수화 합니다. “1000001”을 10진수화 하면 65가 됩니다.
3. 문자로 변환합니다. 즉 아스키 번호 65는 대문자 'A'입니다.
// 대문자들의 아스키 번호는 'A'는 65번, ‘B'는 66번, ’C'는 67번 등 차례대로 1씩 증가하여 ‘Z'는 90번
입력) 첫 줄에는 보낸 문자의 개수(10을 넘지 않음)가 입력됩니다.
다음 줄에는 문자 개수의 일곱 배 만큼의 #또는 *문자가 입력됩니다.
출력) B가 해석한 문자열을 출력합니다.
1.
import java.util.Scanner;
public class Main {
public static String solution(int n, String str) {
String answer = "";
for (int i=0; i<n; i++) {
// 암호 -> 2진수
String temp = str.substring(0,7).replace('#', '1').replace('*', '0');
// 2진수 -> 10진수
int num = Integer.parseInt(temp, 2);
answer += (char)num;
str = str.substring(7); // 7부터 자르기
}
return answer;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String str = scanner.next();
System.out.println(solution(n, str));
}
}
2.
import java.util.Scanner;
public class Main {
public static String solution(int n, String str) {
String answer = "";
String binary = ""; // 2진수
for (char x : str.toCharArray()) {
if (x=='#') binary += 1;
else binary += 0; // '*'
}
for (int i=0; i<str.length(); i+=7) {
String temp = binary.substring(i, i+7);
answer += (char)Integer.parseInt(temp, 2);
}
return answer;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String str = scanner.next();
System.out.println(solution(n, str));
}
}
결과
입력
4
#****###**#####**#####**##**
출력
COOL
댓글