[Java] 아스키코드 비밀 암호 해독하기
핵심. 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)