728x90
시저 암호
문제 설명
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다.
"z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
제한 조건
공백은 아무리 밀어도 공백입니다.
s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
s의 길이는 8000이하입니다.
n은 1 이상, 25이하인 자연수입니다.
입출력 예
s n result
"AB" 1 "BC"
"z" 1 "a"
"a B z" 4 "e F d"
사용된 함수들
String.fromCharCode(65) = A
a = 97 / z = 122 / A = 66 / Z = 90
charCodeAt()
var str = "Hi KIM";
var temp = str.charCodeAt(0);
console.log(temp);
결과 : 72
문자열 배열의 위치를 잡아 유니코드를 반환합니다. (0번째기에 'H'에 대한 유니코드 반환)
function solution([...s], n) {
for(var key in s ){
if( s[key].charCodeAt(0) > 96 ){ // 기본값이 소문자 a보다 작은지 확인
if(s[key].charCodeAt(0)+n > 122 ){ // 변경될 배열의 값이 122를 넘으면 대문자로 넘어가야하기에 확인
s[key] = String.fromCharCode('a'.charCodeAt()+(s[key].charCodeAt(0)+n-123)); // 대문자로 넘어가는 경우 값을 더한 후 소문자 a값(97) 을 기본으로 놔두고 첫번쨰값(a)를 제외하기위해 123을 빼서 남은 숫자만큼 뒤로 더밀어줌. ( 초과한 값만큼 더해서 새롭게 a를 증가시킴 n은 25이하인 자연수 이기에 가능 )
}else{
s[key] = s[key] = String.fromCharCode( (s[key].charCodeAt()+n ) ); // 아니라면 그냥 더해주면 된다.
}
}else if( s[key].charCodeAt(0) == 32){
s[key] = ' ' // 공백은 아무리 밀어도 1칸이기에 공백을주면 완료된다.
}else{
if(s[key].charCodeAt(0)+n > 90 ){
s[key] = String.fromCharCode('A'.charCodeAt()+(s[key].charCodeAt(0)+n-91));
}else{
s[key] = s[key] = String.fromCharCode( (s[key].charCodeAt()+n ) );
} // 소문자와 마찬가지로 대문자를 처리한다.
}
}
return s.join("")
}
이렇게 밖에 할수 없다니..... 성장이 필요하다.
728x90
'혼자해보는 공부' 카테고리의 다른 글
[헤로쿠] No 'Access-Control-Allow-Origin' header is present on the requested resource. net::ERR_FAILED 200 (0) | 2022.08.12 |
---|---|
[React] 에러 모음집 (0) | 2022.07.08 |
[javascript.코딩테스트연습] 없는 숫자 더하기 (0) | 2022.05.19 |
Java 계산기 만들면서 풀이하기(3) (0) | 2022.04.06 |
java계산기 사칙연산까지 해본 후 .. (0) | 2022.04.03 |