728x90
https://programmers.co.kr/learn/courses/30/lessons/12926
문제
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "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" |
기본 제공 틀
function solution(s, n) {
var answer = '';
return answer;
}
풀이 [JavaScript]
우선 들어온 문자를 split함수를 사용하여 쪼갠 값을 배열에 넣어주고 아스키코드 값을 비교하여 대소문자를 구분해주었습니다.
대소문자를 구분한 후, 입력받은 값에서 n값을 추가했을 때, z나 Z의 값보다 큰 경우에는 문자 + n 값에서 26을 빼주어서 다시 A나 a에서부터의 추가된 값을 더해주어 원하는 결과값이 나오게 로직을 구현해보았습니다.
하지만, 아래의 코드는 정석대로 풀었지만 코드의 반복이 있습니다.
function solution(s, n) {
var splited = s.split('');
var answer = '';
for(var i in splited){
if(splited[i] !== ' '){
if(splited[i].charCodeAt(0) >= 97){ //lowerCase
if(splited[i].charCodeAt(0)+ n > 122){
answer += String.fromCharCode(splited[i].charCodeAt(0)+ n -26);
}else{
answer += String.fromCharCode(splited[i].charCodeAt(0)+ n);
}
}else{ //uppercase
if(splited[i].charCodeAt(0)+ n > 90){
answer += String.fromCharCode(splited[i].charCodeAt(0)+ n -26);
}else{
answer += String.fromCharCode(splited[i].charCodeAt(0)+ n);
}
}
}else{
answer += ' ';
}
}
return answer;
}
728x90
아래는 원리는 같지만 반복되는 코드를 제거하고 26으로 나눈 나머지 값이 a와 A로 값에서부터의 차이가 된다는 것을 착안하여 수정한 코드입니다.
function solution(s, n) {
var splited = s.split('');
var answer = '';
for(var i in splited){
var char = splited[i].charCodeAt(0);
if(splited[i] !== ' '){
if(char>=97 && char <= 122){//lowercase
answer += String.fromCharCode((char + n -97)%26 + 97);
}else{//uppercase
answer += String.fromCharCode((char + n -65)%26 + 65);
}
}else{
answer += ' ';
}
}
return answer;
}
채점 결과 [JavaScript]
728x90
'알고리즘 스터디 > 프로그래머스 스킬체크 레벨 1(끝)' 카테고리의 다른 글
[프로그래머스 스킬체크 레벨 1] 숫자 문자열과 영단어 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.07.19 |
---|---|
[프로그래머스 스킬체크 레벨 1] 3진법 뒤집기 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.07.18 |
[프로그래머스 스킬체크 레벨 1] 최대공약수와 최소공배수 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.07.15 |
[프로그래머스 스킬체크 레벨 1] 나누어 떨어지는 숫자 배열 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.07.15 |
[프로그래머스 스킬체크 레벨 1] 2016년 풀이 및 설명 - 자바스크립트[JavaScript] (0) | 2021.07.15 |
댓글