BOJ[11655] - ROT13 by JavaScript
ROT13
문제
언어
- JavaScript
문제 풀이 step 1
- 문제에서 주어진 암호화 방법인 ROT13 은 주어진 문자열에서 각 문자를 알파벳이라면 13 글자를 밀고, 알파벳이 아니라면 변환하지 않는 방식으로 동작합니다.
- 그래서 주어진 문자열에 ROT13 암호화를 진행한 결과가 정답이 됩니다.
문제 풀이 step 2
- 특정 문자를 몇 글자 밀 때, 쉬운 방법은 ASCII 코드를 이용하는 것입니다.
- 예를 들어 13 글자를 민다고 하면, 주어진 문자를 ASCII 코드값으로 변환하고 13 을 더하고 다시 문자 형태로 변환해주면 됩니다.
- 이때 도움을 줄 수 있는 함수는
- String.prototype.charCodeAt() : 주어진 index 에 대한 UTF-16 코드를 나타내는 0 부터 65535 사이의 정수를 반환합니다.
- String.fromCharCode() : UTF-16 코드 유닛의 시퀀스로부터 문자열을 생성해서 반환합니다.
- 위 함수들을 이용해서 주어진 문자열에 대해서 알파벳이라면 코드값으로 변환 후 13 을 더하고, 다시 문자열의 형태로 변환해서 출력하면 됩니다.
- 단, 13 을 더했을 때 알파벳의 범위를 넘어간다면 알파벳의 총 개수인 26 을 빼줌으로써 다시 알파벳의 범위 안에 있을 수 있도록 처리해줍니다.
소스 코드
const input = require("fs").readFileSync("/dev/stdin").toString().split("\n");
const encryptROT13 = (ch) => {
const ACode = "A".charCodeAt(0);
const ZCode = "Z".charCodeAt(0);
const aCode = "a".charCodeAt(0);
const zCode = "z".charCodeAt(0);
let code = ch.charCodeAt(0);
if (ACode <= code && code <= ZCode) {
if (code + 13 > ZCode) code -= 26;
} else if (aCode <= code && code <= zCode) {
if (code + 13 > zCode) code -= 26;
} else return ch;
return String.fromCharCode(code + 13);
};
const solution = (input) => {
const res = input[0].split("").map((v) => encryptROT13(v));
return res.join("");
};
console.log(solution(input));