본문 바로가기
알고리즘 문제풀이

[알고리즘/인프런] 1-12 암호(인프런 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의)

by jeonghaemin 2021. 5. 10.
728x90

인프런의 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비 강의를 수강하며 예습 풀이 코드, 강의에서 설명하는 풀이 코드를 정리하고 있습니다.

  • 문제 링크 : https://cote.inflearn.com/contest/10/problem/01-12
  • 문제 설명 : 암호문을 이진수로 변환하고 그 이진수를 문자로 변환하는 문제
    1. 문자열의 문자 '#'은 이진수 1로 문자 '*'은 이진수 0으로 변환
    2. 변환된 문자열을 7자리씩 잘라서 하나의 2진수로사용
    3. 각각 2진수를 문자로 변환하여 최종적으로 문자열을 반환한다.

입출력 예시

입력 예시

4
#****###**#####**#####**##** 

출력 예시

COOL

내 풀이

  • 2진수 -> 10진수 : Integer.parseInt(문자열, 진법)
  • subString(), replace() 메서드 사용
public class Main1_12 {

    public static String solution(int n, String s) {

        StringBuilder sb = new StringBuilder();
        String binary = s.replace("#", "1").replace("*", "0");

        for (int i = 0; i < n; i++) {
            char c = (char) Integer.parseInt(binary.substring(i*7, i*7+7), 2);
            sb.append(c);
        }

        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 s = br.readLine();

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

강의 풀이

  • 내 풀이와 같은 방식으로 풀이
import java.util.*;
class Main {    
    public 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;
    }

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

댓글