알고리즘
[문자열] 문자열 압축 & 암호(replace(), parseInt(string,2))
날아
2023. 3. 23. 16:33
Q. 알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하시오.
단, 반복횟수가 1인 경우 생략한다.
Class Main {
public int solution(String str){
String answer = "";
str = str+" ";
int cnt = 1;
for(int i=0; i<str.length()-1; i++){
if(str.charAt(i)==str.charAt(i+1){
cnt++;
} else {
answer += str.charAt(i);
if(cnt>1) {
answer += String.valueOf(cnt);
cnt = 1;
}
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.print(T.solution(str));
}
}
- str = str + " "; : 로직이 i 와 i+1을 비교하기 때문에 마지막에 빈 문자열을 하나 허수로 만들어줘야한다.
- for(int i=0; i<s.length()-1; i++) : 빈 문자열을 하나 허수로 만들어줬기때문에 s.length()-1만큼 반복문을 돌아야한다.
- answer += String.valueOf(cnt); : int 타입인 cnt를 String타입으로 변환하기 위해서 사용한 메서드
Q. 암호문제
비밀편지는 알파벳 한 문자마다 # 또는 *이 7개로 구성되어 있다.
1. 일곱자리 이진수로 바꾼다. #는 이진수의 1로, *는 이진수의 0으로 바꾼다.
2. 바꾼 2진수를 10진수화 한다.
3. 아스키번호로 문자를 변환한다.
Class Main {
public int 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.print(T.solution(n, str));
}
}
- Integer.parseInt(tmp,2) : 2진수를 10진수로 바꾸어준다.