24-05-31 ( 아스키코드 변환 )
금일 코드카타 문제
문제설명
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 된다. 문자열 s와 거리 n을 입력받아
s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
제한조건
1. 공백은 아무리 밀어도 공백
2. s는 알파벳 소문자, 대문자 ,공백으로만 이루어져 있다.
3. s의 길이는 8000이하입니다.
4. n은 1이상, 25이하인 자연수
입출력 예
s | n | result |
"AB" | 1 | "BC" |
"z" | 1 | "a" |
"a B z" | 4 | "e F d" |
문제를 보고 바로 알파벳을 숫자화 시키면 될 거 같은 생각을 먼저 하게 되었고, 알파벳 하나하나마다 숫자화를 시키면 시간적으로도 오래걸리고 코드에 가독성도 좋지 않다고 생각이 들었다.
생각을 하던 와중에 옛날에 알았던 아스키코드가 생각이 났고 혹시 아스키 코드로 바꾸어주는 명령어가 있는지 구글링 해보았다.
아스키코드 ( ASCII )란 ?
컴퓨터는 문자를 숫자로 표현하고 있다. 그 순서를 표준 구격으로 나타낸 것
아스키 코드는 0번부터 127번까지 있으며, 제어 문자 코드는 0번부터 31번, 스페이스 문자는 32번 (여기부터 인쇄 가능 코드이다) 숫자는 48번부터 57번까지, 영어 대문자는 65번부터 90번까지. 영어 소문자는 97번부터 122번까지이다.
문자를 아스키코드화
문자 - > 아스키코드
const char = "A"
const p1 = char.charCodeAt()
console.log(p1) // 65
숫자(아스키코드)를 문자화
숫자(아스키코드) -> 문자
const p1 = String.fromCharCode(65, 66, 67)
console.log(p1) // "ABC"
메서드를 사용하여 아래와 같이 코드를 작성하여 코드카타를 해결하였다 .
function solution(s, n) {
let answer = "";
const split = s.split("");
for (let i = 0; i < split.length; i++) {
let char = split[i];
if (char === " ") {
answer += " ";
continue; // 만약 공백이라면 아래의 코드를 실행하지않고 다음으로 넘어감
}
let charCode = char.charCodeAt(0);
if (char >= 'a' && char <= 'z') { // 소문자의 경우만 포함
charCode = ((charCode - 97 + n) % 26) + 97; //알파벳이 총26개가 넘어갔을 경우 때문에 %26
} else if (char >= 'A' && char <= 'Z') { //대문자의 경우만 포함
charCode = ((charCode - 65 + n) % 26) + 65; //알파벳이 총26개가 넘어갔을 경우 때문에 %26
}
answer += String.fromCharCode(charCode); //다시 아스키코드 - > 문자화
}
return answer;
}
이를 통해 해결 할 수 있었다 .
어디에 더 사용할 수 있을까 생각도해보고 찾아도 보았는데,,, 생각나는거는 아스키코드로밖에 데이터를 주거나 받거나할때 변환하는거밖에 아직은 생각나는게 없었다.. 그래도 알고있다면 나중에 무엇을 사용할 때 이런것도 있었지 하고 생각이 날 수있을거 같고 신기해서 한번 정리도 해보았다.