이 알고리즘 문제는 인프런의 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 (김태원)의 문제입니다.


문제 설명

 

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static String solution(int n, String message) {
        StringBuilder sb = new StringBuilder();
        String binary; // 변환된 전체 이진수 문자열을 저장할 변수
        String[] binaryCharArr = new String[n]; // 7비트 단위의 이진수 문자열을 저장할 배열
        int idx = 0; // 배열의 인덱스를 관리할 변수
        
        // 메시지에서 양 끝 공백을 제거한 후, #을 1로, *을 0으로 변환하여 sb에 추가
        sb.append(message.trim().replace('#', '1').replace('*', '0'));
        
        // 변환된 이진수 문자열을 binary 변수에 저장
        binary = sb.toString();
        sb = new StringBuilder(); // sb 초기화하여 이후 변환된 문자를 저장하는 데 사용
        
        // 이진수 문자열을 7비트 단위로 나누어 문자로 변환
        for(int i = 0; i < binary.length(); i += 7){
            // 7비트 단위로 잘라서 배열에 저장
            binaryCharArr[idx++] = binary.substring(i, i + 7);
            // 2진수 문자열을 정수로 변환하고 다시 문자로 변환하여 sb에 추가
            sb.append((char) Integer.parseInt(binaryCharArr[idx - 1], 2));
        }
        return sb.toString();
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        String message = br.readLine();
        System.out.println(solution(N, message));
    }
}

 

설명

  • 코드 주석 참고