다희의 코딩 성장일기
[JUNGOL] 정올 1880. 암호풀기(Message Decowding)_자바 JAVA 본문
[ 문제 ] 정올 1880. 암호풀기(Message Decowding)
문제 링크 : jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1153&sca=2050
[ 입출력 ]
[ 풀이 ]
< 접근 방법 및 풀이 >
- 처음에 문제보고 무슨 소리지? 하고 이해하는데 시간이 조금 걸렸다.
- 입력예시를 잘 보면 이해하기 쉽다. 첫 줄 입력에는 복호화키 26개가 소문자로 주어진다.
- 예를들어, 입력 예시처럼 eydbkmiqug ... 이런식으로 입력이 들어오면 a,b,c,d... 를 순서대로 복호화 키 문자로 대치하면 된다.
- [ arr 배열 ]
o | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
e | y | d | b | k | m | i | q | u | g |
a | b | c | d | e | f | g | h | i | j |
- 다음 줄에는 암호화된 문자가 최대 80개 입력된다.
- 예를들어, abc를 입력하면 복호화키 eyd로 해석이 된다.
- 따라서, 알파벳은 총 26개고, 복호화키 26개를 알파벳순으로 매칭시켜서 암호화를 풀어내면 된다.
- 1. 첫줄에 입력받은 복호화키를 String 한줄로 입력받아 toCharArray() 메서드를 통해 char 배열로 바꾼다. arr배열에 저장.
- 2. 두번째 줄에 입력받은 암호화된 문장은 마찬가지로 msg[] 배열에 저장.
- 원문을 복호화키로 해석해 출력하기. 공백은 공백그대로, 소문자는 소문자, 대문자는 대문자로 복호화해서 출력.
- 아스키코드로 소문자 a는 97이므로, 입력받은 암호화 문장에서 97을 뺀 값을 배열의 index처럼 사용함.
- ex) b를 입력했을 경우 b의 아스키코드값 98 - 97 = 1이며, arr[1] = y. 이런식으로 원문 해석해서 출력함.
- 마찬가지로 대문자 B는 소문자 b에서 32 차이가 나므로, 대문자로 입력이 들어오면 32를 더해 소문자로 바꿔서 복호화된 값을 구해준 뒤 다시 32를 빼 해당문자의 대문자로 변환하면 된다.
- 자세한건 코드 주석 참고.
< 주의할 점 >
- 암호화된 문장의 대문자도 해석해서 소문자가 아닌 대문자로 출력해야하는 부분을 주의하기!
JAVA코드
package 문자열;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class 암호풀기_1880 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
//복호화 키 26개 소문자 입력.
char arr[] = in.readLine().toCharArray();
//암호화된 문장 입력받아 배열로 바꿈.
char msg[] = in.readLine().toCharArray();
//원문 출력
for (int i = 0; i < msg.length; i++) {
//공백이면 그대로 출력
if(msg[i] == ' ') {
System.out.print(msg[i]);
continue;
}
//대문자라면
if(msg[i] < 97) {
msg[i] += 32; //소문자로 바꾸고
System.out.print((char)(arr[msg[i] - 97] - 32));
continue;
}
//그냥 소문자일 경우
System.out.print(arr[msg[i] - 97]);
}
}
}
REVIEW
처음에 문제를 보고 뭔말이지 멈칫했는데 천천히 이해해볼 것.
빠르게 보고 이해하려고 하지말자.
'Algorithm > 정올' 카테고리의 다른 글
[JUNGOL] 정올 1009. 각 자리수의 역과 합(Number Reverse)_자바 JAVA (0) | 2020.12.27 |
---|---|
[JUNGOL] 정올 1516. 단어 세기_자바 JAVA (0) | 2020.12.27 |
[JUNGOL] 정올 2857. 세로읽기_자바 JAVA (1) | 2020.12.27 |
[정올 Begginer_Coder - 문자열] 2514.문자열 찾기_자바JAVA (1) | 2020.12.14 |
[정올 Begginer_Coder - 문자열] 2604.그릇_자바JAVA (0) | 2020.12.14 |
Comments