개발놀이터

1-12. 2진 암호 본문

기타/코딩테스트

1-12. 2진 암호

마늘냄새폴폴 2023. 2. 9. 12:18

 

package string.SecureNumber112.my;

import java.util.Scanner;

public class Main {

    /**
     * -내 풀이-
     * 입력 받은 문자열을 replace 를 이용해 1 과 0 으로 이루어진 문자열로 바꾸는데 성공 했다
     * 그리고 7개 단위로 끊어서 나열하는 것까지도 성공했다.
     * 하지만 10진수를 2진수로 바꾸는 것을 몰라서 그리고 2진수를 아스키코드로 다시 바꾸는 것도 몰라서
     * 결국 구글링으로 해결했음
     *
     * -선생님 풀이-
     * 1. 문자열을 0부터 7까지 substring 을 이용해 자른다
     * 2. replace 메서드를 이용해 # 은 1 로 * 은 0 으로 바꾼다.
     * 3. Integer 클래스에 parseInt 로 2진수 -> 10진수로 바꾼다. Integer.parseInt(tmp, 2);   // 중요! 2진수 -> 10진수
     * 4. char 로 캐스팅해서 문자로 만든다.     // 중요! 아스키코드 -> 문자
     * 5. 문자를 answer 에 붙인다.
     * 6. 자른만큼 버린다 substring(7)
     */

    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        String input = kb.next();

        System.out.println(solution(input, n));
    }

    private static String solution(String input, int n) {
        String answer = "";
        String tmp = "";

        for (int i = 0; i < input.length() ; i++) {
            if (i % 7 == 0) {
                for (int j = i; j < i + 7 ; j++) {
                    tmp += input.charAt(j);
                }
                String binaryString = tmp.replace('#', '1').replace('*', '0');

                int binary = Integer.valueOf(binaryString, 2);

                char binaryCharacter = (char) binary;

                answer += binaryCharacter;

                tmp = "";
            }
        }

        return answer;
    }
}

 

package string.SecureNumber112.teacher;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        String str = kb.next();
        System.out.println(solution(n, str));
    }

    private static String solution(int n, String s) {
        String answer = "";

        for (int i = 0; i < n; i++) {
            String tmp = s.substring(0, 7).replace('#', '1').replace('*', '0');
            int num = Integer.parseInt(tmp, 2);
            answer += (char) num;
            s = s.substring(7);
        }

        return answer;
    }
}

'기타 > 코딩테스트' 카테고리의 다른 글

2-2. 보이는 학생  (0) 2023.02.14
1장 문자열 주요 개념 복습 노트  (0) 2023.02.09
1-11. 문자열 압축  (0) 2023.02.09
1-10. 가장 짧은 문자 거리  (0) 2023.02.09
1-9. 숫자만 추출  (0) 2023.02.09