문자열 암호 해독

최준호·2021년 8월 4일
0

알고리즘 강의

목록 보기
8/79

설명

현수는 영희에게 알파벳 대문자로 구성된 비밀편지를 매일 컴퓨터를 이용해 보냅니다.

비밀편지는 현수와 영희가 서로 약속한 암호로 구성되어 있습니다.

만약 현수가 “#*#”으로 구성된 문자를 보냈다면 영희는 현수와 약속한 규칙대로 다음과 같이 해석합니다.

  1. “#*#”를 일곱자리의 이진수로 바꿉니다. #은 이진수의 1로, *이진수의 0으로 변환합니다. 결과는 “1000001”로 변환됩니다.

  2. 바뀐 2진수를 10진수화 합니다. “1000001”을 10진수화 하면 65가 됩니다.

  3. 아스키 번호가 65문자로 변환합니다. 즉 아스크번호 65는 대문자 'A'입니다.

참고로 대문자들의 아스키 번호는 'A'는 65번, ‘B'는 66번, ’C'는 67번 등 차례대로 1씩 증가하여 ‘Z'는 90번입니다.

현수가 보낸 신호를 해석해주는 프로그램을 작성해서 영희를 도와주세요.

코드

public class Decode {
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        int input1 = in.nextInt();
        String input2 = in.next();
        solution(input1, input2);
    }
    public static void solution(int input1, String input2){
        input2 = input2.replace("#", "1").replace("*", "0");
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<input1; i++){
            String str = input2.substring(0, 7);
            input2 = input2.substring(7);
            int parse = Integer.parseInt(str, 2);
            char c = (char) parse;
            sb.append(c);
        }
        System.out.println(sb.toString());
    }
}

2진수 변환과정을 직접 구현했다면 긴 문제였겠지만 Integer.parseInt("변경될 문자열", 변경하고자 하는 진수)를 알고 있다면 금방 해결할 수 있는 문제

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글