알고리즘/Java 코딩 테스트 준비

[Java] 아스키코드 비밀 암호 해독하기

Dev dreamer 2023. 1. 30. 11:31

핵심. 2진수를 10진수로 바꿔주는 함수. (이걸 몰라서 길게 구현함.)

 

 

문제

 

7 글자씩 # 과 *로 이루어진 암호는 알파벳 한 문자이다.

해당 암호는 #은 이진수 1 *은 이진수 0 을 의미하며

 

이진수를 10진수로 바꾼 값은 알파벳의 아스키코드이다.

 

#****###**#####**#####**##** 

 

의 암호를 해석해라.

 

입력 

 

#****###**#####**#####**##**

 

출력

 

COOL

 

💡 내 풀이 (2시간 가까이 푼듯..)😥


어 이진법 ?? 어떻게 해야지??

 

아스키코드는 아는데?

48 65 97 

0   A   a

57 90 122

 

일단 # 이랑 *을 replaceAll로 바꿔줘야 겠다

 

까지 생각하고 문제를 풀기 시작했다.

 

🔍 1. 일단 받은 암호 문자열에서 #을 1로 * 을 0으로 바꿔준다.

이때 *은 모든 부분을 포함한다는 의미로 java 에서 쓰이기 때문에 반드시 \\을 앞에 붙여줘야 한다.

 

🔍 2. 그 후에 String을 7글자씩 담을 배열을 선언해주는데 이것때문에 1시간 넘게 고민했다.

 

문자열을 배열에 담고 2진수를 10진수로 바꿔주는 식에서

1이 들어올 때 어떠한 계산을 적용해야 했는데

자꾸 n u l l 이 앞에 먼저 들어왔다.

배열을 처음에 선언해 줄 때 초기값 null 이 들어있다.

따라서 배열을 선언했으면 반드시 초기화를 시켜줘야 한다.

 

🔍 이후 2진법 문자를 10진법으로 바꾸는 과정을 진행했다.

이중배열을 사용하여 7문자씩 담은 배열의 한 문장을 꺼내주고

그 문자열에서 1이라는 문자가 나올때의 위치를 이용해 10진수로 바꿀 방법을 생각했따.

 

일단 숫자 a , b 가 있다고 하면 a 의 b 승은 Math.pow(a , b) 이다.

그리고 각 문자열의 마지막 문자가 나올때 해당한 10진수 아스키코드 숫자를 문자로 바꿔준다.

 

아스키 코드 숫자 => 문자 (char) 아스키넘버

를 이용해 주면 된다.

 

 

 

 

💡 강사님 풀이


 

강사님은 subString 을 이용해서 해당 문자를 잘라서 이용함.

 

원래 문제는 각 문자가 나올 개수를 먼저 입력 받았음.(문제 똑바로 읽자..)

 

substring 으로 하나를 뽑아냈으면 그 앞은 버리고 다시 뽑아내도록 해줘여 한다.

substring 으로 7글자를 잘라주고 사용한 다음 기존의 문장은 7글자이후로 다시 만들어준다.

substring(0,7) index 0~6까지 잘라줌 // substring(7) 7글자부터 다시 문자열 구성

 

replace 쓸 때 한번 바꾼 문장 뒤에 바로 다시 replace 를 적용해서 바꿔줄 수 있다.

 

2진수를 10진수로 바꿔주는 함수.

강사님도 (char) num 을 통해서 바꿔줌.

 

 

 



 

 

 

 

 

코테 관련해서 많이 부담스러웠는데 강의를 통해 푸는 방법들을 배우니 이 시간이 즐겁습니다.

진짜 기능하나하나 다양한 방법으로 잘 가르쳐주십니다.

출처 : 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 대시보드 - 인프런 | 강의 (inflearn.com)