Problem Solving/프로그래머스

[프로그래머스/JavaScript] 시저 암호

세고래 2022. 9. 8. 01:52

https://school.programmers.co.kr/learn/courses/30/lessons/12926

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


1) 풀이

해당 문제는 좀 고민이 많았던 문제였다

난이도가 어려웠던 건 아닌데, 아스키 코드를 적용시켜 대문자, 소문자를 구분하려다보니

비슷한 형태인데 다 따로 코드를 적어주어 뭔가 낭비되는 느낌이 컸다..😂

 

그래서 다른 분들의 풀이를 봤는데, 어차피 n이 아무리 커도 25까지이기 때문에,

그냥 소문자 대문자를 한 문자열에 집어넣고 반복문으로 탐색해서 확인하는 방법을 많이 쓰셨다..!

나는 생각지도 못했는데 ..역시 똑똑한 사람들이 많다

그래도 난 아스키 코드로 변환하는 방법을 알게 되었으니, 오늘도 하나 배웠다고 생각! (자료는 아래에)

아래는 다른 분들이 가장 많이 시도한 코드이다

function solution(s, n) {
    var upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var lower = "abcdefghijklmnopqrstuvwxyz";
    var answer= '';

    for(var i =0; i <s.length; i++){
        var text = s[i];
        if(text == ' ') {
            answer += ' '; 
            continue;
        }
        var textArr = upper.includes(text) ? upper : lower;
        var index = textArr.indexOf(text)+n;
        if(index >= textArr.length) index -= textArr.length;
        answer += textArr[index];
    }
    return answer;
}
2) 최종 소스코드
function solution(s, n) {
    let answer = '';
    for(let i=0;i<s.length;i++){
        let tmp=s.charCodeAt(i)+n;
         if(s.charCodeAt(i)>=65&&s.charCodeAt(i)<=90){
             if(tmp>90){
                 tmp-=26;
             }
         
         answer+=String.fromCharCode(tmp);
         }
        else if(s.charCodeAt(i)>=97&&s.charCodeAt(i)<=122){
            if(tmp>122){
                 tmp-=26;
             }
             answer+=String.fromCharCode(tmp);
        }else{
            answer+=s[i];
        }
    }
    return answer;
}
3) 참고자료

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=diceworld&logNo=220175224345 

 

자바스크립트 아스키코드 변환하기 (charCodeAt / fromCharCode)

- charCodeAt / fromCharCode 란? charCodeAt 은 문자열중 하나를 선택하여 아스키코드 번호로 변환...

blog.naver.com

 

728x90