Algorithm/문제

12.암호

챛채 2023. 5. 25. 17:57

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
   public String solution(int n, String s) {
       String answer ="";
       for (int i = 0; i < n; i++) { //n개의 문자가 만들어져야함
           String tmp = s.substring(0,7).replace('#', '1').replace('*','0'); //0~7번인덱스까지 분리해서 대체
           int num = Integer.parseInt(tmp, 2);
           answer += (char)num;
          // System.out.println(tmp+ " "+num);
           s=s.substring(7); //이 코드가 없으면 앞의 7글자만 계속 출력 됨
           //s가 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));
   }
}

 

다른 풀이

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
   public String solution(int cnt, String str) {
       String answer ="";
       String password = "";
       char[] chArray = str.toCharArray();
       for(int i=0; i<chArray.length; i++){
           password += String.valueOf(chArray[i])
                   .replace('#', '1')
                   .replace('*', '0'); // #를 1로, *를 0으로 변환

           // str의 길이는 28개 문자고, cnt는 4이므로 7개씩 묶는다는 의미가 된다 (나누는 수 : 7)
           if((i % (str.length()/cnt)) == 6){                            // password에 쌓은 것이 7개가 되면,
               answer += (char)(Integer.parseInt(password,2));      // 2진수를 10진수로 전환해서 문자로 answer에 누적
               password = "";                                            // answer에 누적했으므로 비워주자
           }
       }



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