본문 바로가기
[항해99] TIL

8일차 (알고리즘4)

by @kkkk_biiin 2023. 8. 22.
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