본문 바로가기
알고리즘(Java)/String

[알고리즘]String(문자열) 12. 암호 - #과 *로 구성된 암호를 알파벳 대문자로 해석하기

by snowballchoi 2021. 7. 18.
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

댓글