인프런의 자바(Java)알고리즘 문제풀이 입문:코딩테스트 대비 강좌의 강의를 보고 문제 해설을 작성해보았습니다.
섹션1. String(문자열)의 12. 암호 강의편 입니다.
설명
현수는 영희에게 알파벳 대문자로 구성된 비밀편지를 매일 컴퓨터를 이용해 보냅니다.
비밀편지는 현수와 영희가 서로 약속한 암호로 구성되어 있습니다.
비밀편지는 알파벳 한 문자마다 # 또는 *이 일곱 개로 구성되어 있습니다.
만약 현수가 “#*****#”으로 구성된 문자를 보냈다면 영희는 현수와 약속한 규칙대로 다음과 같이 해석합니다.
1. “#*****#”를 일곱자리의 이진수로 바꿉니다. #은 이진수의 1로, *이진수의 0으로 변환합니다. 결과는 “1000001”로 변환됩니다.
2. 바뀐 2진수를 10진수화 합니다. “1000001”을 10진수화 하면 65가 됩니다.
3. 아스키 번호가 65문자로 변환합니다. 즉 아스크번호 65는 대문자 'A'입니다.
참고로 대문자들의 아스키 번호는 'A'는 65번, ‘B'는 66번, ’C'는 67번 등 차례대로 1씩 증가하여 ‘Z'는 90번입니다.
현수가 4개의 문자를 다음과 같이 신호로 보냈다면
#****###**#####**#####**##**
이 신호를 4개의 문자신호로 구분하면
#****## --> 'C'
#**#### --> 'O'
#**#### --> 'O'
#**##** --> 'L'
최종적으로 “COOL"로 해석됩니다.
현수가 보낸 신호를 해석해주는 프로그램을 작성해서 영희를 도와주세요.
입력
첫 줄에는 보낸 문자의 개수(10을 넘지 안습니다)가 입력된다. 다음 줄에는 문자의 개수의 일곱 배 만큼의 #또는 * 신호가 입력됩니다.
현수는 항상 대문자로 해석할 수 있는 신호를 보낸다고 가정합니다.
출력
영희가 해석한 문자열을 출력합니다.
예시 입력 1
4
#****###**#####**#####**##**
예시 출력 1
COOL
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class 암호 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt( br.readLine());
String str = br.readLine();
solution(num, str);
}
public static void solution(int n, String s) {
String ans="";
for(int i=0; i<n; i++) {
String tmp = s.substring(0,7).replace('#','1').replace('*','0');
int num = Integer.parseInt(tmp, 2);
ans+=(char)num;
s = s.substring(7);
}
System.out.println(ans);
}
}
>>해설
입력 받은 정수 갯수만큼 돌면서
#****###**#####**#####**##**
이 문자열을 0부터 7까지 끊는다. 그리고 7부터 나머지 문자를 적용시키기 위해 .substring(7)을 한다.
replace() 함수를 이용해서 문자열에 '#'이 있으면 1로 '*'이 있으면 0으로 변환시킨다.
그리고 tmp에 든 2진수를 10진수로 변환하기 위해 Integer.parseInt()함수를 이용하여 인자를 tmp와 2를 준다.
그러면 num에는 10진수 숫자가 들어있는 상태가 된다.
이 10진수를 다시 문자로 변환하기 위해 캐스트 연산자를 활용하여 num을 문자로 변환하고 ans 에 저장한다.
최종적으로 ans 를 출력하면서 프로그래밍을 종료한다.
'Computer Science > Algorithm' 카테고리의 다른 글
[Inflearn] 보이는 학생 (0) | 2022.11.13 |
---|---|
[Inflearn] 큰 수 출력하기 (0) | 2022.11.13 |
[Inflearn] 문자열 압축 (0) | 2022.11.13 |
[Inflearn] 가장 짧은 문자거리 (0) | 2022.11.12 |
[Inflearn] 숫자만 추출 (0) | 2022.11.05 |