728x90
시저 암호 문제
항해 99에서 알고리즘 문제를 풀면서 처음으로 어떻게 풀어야 될지 감을 못 잡겠는 문제를 만났다... 시저 암호 문제였는데, 주어진 문자열을 n만큼 이동시킨 값을 출력하는 것이었다. 오늘은 검색을 통해 찾아본 코드를 리뷰하고자 한다.
// https://school.programmers.co.kr/learn/courses/30/lessons/12926
// 시저 암호
function solution(s, n) {
let upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
let lower = "abcdefghijklmnopqrstuvwxyz"
let newString = ""
// 문자열 반복 시작
for(let i=0; i<s.length; i++){
// 만약 문자가 공백일 경우 " " 추가
if(s[i] === " "){
newString += " "
continue
}
// 문자가 대문자면 upper, 소문자면 lower을 newText로 활용
let newText = upper.includes(s[i]) ? upper : lower
// s[i]를 포함한 newText의 인덱스 + n
let idx = newText.indexOf(s[i]) + n
// 만약 인덱스가 newText의 길이보다 길다면 idx = newText.length
if(idx >= newText.length){
idx -= newText.length
}
// 새로운 문자열에 문자 더하기
newString += newText[idx]
return newString;
}
}
처음에 생각한 방법은 당연하게도 아스키코드를 사용하는 것이었다. 하지만 아스키 코드로 변환하는 방법을 몰랐을 뿐만 아니라, 자주 쓰지 않을 것 같다는 생각이 들었고, 가독성이 좋지 않을 것이라고 판단하였다. 그래서 다른 방법을 찾던 중, 대문자와 소문자로 이루어진 문자열을 선언하여 활용하는 방법을 찾아냈다. 위의 코드는 처음에 알파벳 변수를 선언해야 한다는 점 빼고는 다른 모든 점들이 맘에 들어서 위의 방법을 활용하여 문제를 풀기로 하였다. 반복문을 많이 사용하지 않고, 가독성이 좋은 코드라고 생각하며, 주석을 달아놨기 때문에 코드에 대한 설명은 생략..
728x90
'[항해99] TIL' 카테고리의 다른 글
10일차 (알고리즘6) (0) | 2023.08.25 |
---|---|
9일차 (알고리즘5) (0) | 2023.08.24 |
7일차 (알고리즘3) (2) | 2023.08.22 |
2주차 WIL(ES6 문법) (0) | 2023.08.22 |
[항해99] 6일차(알고리즘2) (0) | 2023.08.19 |