알고리즘/문자열, 정렬
[알고리즘] 암호 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
반응형