indexOf()
메서드를 이용해서 입력받은 문자열의 현재 (알파벳) 인덱스를 구한다. curIdx
docodedIdx = curIdx - secret
function decryptCaesarCipher(str, secret) {
let alphabet = 'abcdefghijklmnopqrstuvwxyz';
let decodedStr = ''
for (let i = 0; i < str.length; i++) {
if (str[i] !== ' ') {
let curIdx = alphabet.indexOf(str[i]);
let docodedIdx = curIdx - secret;
decodedStr += alphabet[docodedIdx];
} else {
decodedStr += ' '
}
}
return decodedStr
}
입력받은 secret
이 curIdx
보다 큰 경우에는 decodedIdx
가 음수가 되고 알파벳 문자열의 인덱스 범위를 벗어나게 돼서 제대로 동작하지 않는다. decodedIdx
가 음수가 될 경우를 처리해주는 코드를 추가해줘야 한다.
또한, 현재 else 조건에 써준 공백처리 부분은 if문 코드보다 훨씬 간단한 작업이므로 위로 올려주는게 좋다. (공백의 경우 지금 if문을 거칠 필요가 없기 때문)
function decryptCaesarCipher(str, secret) {
let alphabet = 'abcdefghijklmnopqrstuvwxyz';
let decodedStr = ''
for (let i = 0; i < str.length; i++) {
if (str[i] === ' ') {
// 공백은 그대로 담아준다. (아래 복호화 과정을 거칠 필요 없음)
decodedStr += ' '
} else {
//현재 문자열의 알파벳 인덱스
let curIdx = alphabet.indexOf(str[i]);
//현재 문자열에서 secret만큼 왼쪽으로 이동시킨 것이 복호화 인덱스
let docodedIdx = curIdx - secret;
//복호화 인덱스가 음수인 경우에는 알파벳 길이를 더해준다. (알파벳문자열 인덱스 범위 내로 바꿔준다)
docodedIdx < 0? docodedIdx = alphabet.length + docodedIdx : docodedIdx
decodedStr += alphabet[docodedIdx]
}
}
return decodedStr
}