반응형
https://programmers.co.kr/learn/courses/30/lessons/12926
나의 풀이
function solution(s, n) {
const upperList = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
const lowerList = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
return s.split("")
.map(char => {
if (char === " ") {
return " "
} else if (char === char.toUpperCase()) {
if ((upperList.indexOf(char) + n) > upperList.length - 1) {
return upperList[upperList.indexOf(char) + n - upperList.length];
}
return upperList[upperList.indexOf(char) + n];
}
if ((lowerList.indexOf(char) + n) > lowerList.length - 1) {
return lowerList[lowerList.indexOf(char) + n - lowerList.length];
}
return lowerList[lowerList.indexOf(char) + n];
})
.join("");
}
대문자와 소문자 알파벳 리스트를 만들었다.
s를 split 하여 배열로 만들고, map으로 대소문자, 공백에 따라 변환을 수행하도록 하였다.
마지막에 join하여 문자열로 반환하였다.
그런데 아스키 코드를 사용하면 코드를 더 간결하게 작성할 수 있다.
아스키코드
여기서 대문자 알파벳은 16진수 기준으로 65 ~ 90까지이고, 소문자는 97 ~ 122까지이다.
이를 활용하여 코드를 작성해보았다.
function solution(s, n) {
return s.split("")
.map(char => {
if (char === " ") {
return " "
}
return String.fromCharCode(char.charCodeAt(0) > 90 ? (char.charCodeAt(0) + n - 97) % 26 + 97 : (char.charCodeAt(0) + n - 65) % 26 + 65);
})
.join("");
}
절반 가까이 코드를 줄일 수 있었다!
반응형
'IT > Algorithm' 카테고리의 다른 글
프로그래머스) 문자열 압축 (0) | 2021.10.28 |
---|---|
프로그래머스) 최대공약수와 최소공배수 (0) | 2021.10.27 |
프로그래머스) 문자열 내 마음대로 정렬하기 (0) | 2021.10.25 |
프로그래머스) 소수 찾기 (0) | 2021.10.25 |
프로그래머스) 실패율 (0) | 2021.10.24 |