알고리즘/문자열, 정렬

[알고리즘] 암호 with Java, replace(), subString(a,b),parseInt(a,2)

VIPeveloper 2022. 2. 27. 16:41
728x90
반응형

문자열 마지막 문제. 여러 가지 꿀팁을 알게 된 것 같아 뿌듯하다. 까먹지 않게 자주자주 복습해주어야겠다.

오늘 배운 것

1. replace('#','1').replace('*','0')

replace는 chain처럼 여러 번 사용 가능하다.

String tmp = str.substring(0,7).replace('#', '1').replace('*', '0');

2. 2진수를 10진수로 바꾸기

Integer.parseInt(i,2)를 사용하면 가능하다. 뒤쪽에는 몇 진수로 들어갔는지 입력해주면 된다.

String tmp = '100';
int num = Integer.parseInt(tmp,2);
System.out.println(num);	// 4

3. subString(a, b)

. subString(a) : a ~ 쭉 사용 가능하다. 잘라진 범위 이후를 새로 할당하고 싶을 때 사용

. subString(a, b) : 자르고 싶은 범위 지정 a이상 b미만 잘린다.

String tmp = str.substring(0,7);	// 자르고 싶은 문자열 범위 지정
str = str.substring(7);		// 잘린 이후의 문자열을 새로 할당

4. 문제 풀이

import java.util.Scanner;

public class Main {

    public static String solution(String str,int i){
        String answer = "";
        str+=" ";
        char[] chars = str.toCharArray();
        String tmp = "";

        for (int j = 0; j < chars.length; j++) {
            if(j!=0 && j%7==0){
                // 2진수 10진수로 만들기
                answer+=twoToTen(tmp);
                tmp="";
            }
            if(chars[j] == '#'){
                tmp+='1';
            }else{
                tmp+='0';
            }
        }
        return answer;
    }
    public static String solution2(String str,int i){
        String answer= "";

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

        return answer;
    }

	// Integer.parseInt(tmp,2) 로 담당일찐 가능
    private static char twoToTen(String tmp) {
        char[] chars = tmp.toCharArray();
        int ans = 0;
        int cnt = 0;

        for (int i = chars.length-1; i >=0 ; i--) {
            if(chars[i]=='1'){
                ans += Math.pow(2,cnt);
            }
            cnt+=1;
        }
        return (char)ans;
    }

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

    }
}

느낀 점

문자열 파트 강의를 수강하며 약 15%정도의 진도를 진행하였다. 5일차에 15강 수강을 했는데, 하루 평균 2강의~3강의 정도 들었다고 보면 될 것 같다.

이 진도로 계속 잘 나갈 수 있다면 좋겠지만, 이게 제일 쉬운 파트니까.. 그래도 하루에 2강의정도는 정리하면서 공부하는 내가 되고싶다.

728x90
반응형