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

728x90
반응형

(1) 내 코드

function solution(s, n) {
  let answer = '';

  for (let i = 0; i < s.length; i++) {
    //문자 -> 아스키코드
    //str.charCodeAt(index)
    let ascii = s.charCodeAt(i);

    if (ascii >= 65 && ascii <= 90) {
      //대문자인 경우, n만큼 더하기
      ascii += n;
      if (ascii > 90) {
        //대문자Z를 넘어가면 A로
        ascii -= 26;
      }
    } else if (ascii >= 97 && ascii <= 122) {
      //소문자인경우, n만큼 더하기
      ascii += n;
      if (ascii > 122) {
        //소문자z를 넘어가면 a로
        ascii -= 26;
      }
    }

    ////String.fromcharCode(아스키숫자)
    answer += String.fromCharCode(ascii);
  }
  return answer;
}
 

1) 아스키코드 변환

문자 -> 아스키 변경 : str.charCodeAt(index)

아스키 -> 문자 변경 : String.fromCharCode(아스키코드)

 

2) 대문자인 경우 (65~90) / 소문자인 경우 (97~122)

 

3) Z는 A 출력을 위해 26개의 대문자( 또는 소문자) 개수 26개를 빼서 다시 A로 

 

4) 아스키코드에서 문자로 변경해서 출력

 

 

2. 다른 사람 풀이

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;
}

* 아스키 코드 없이 사용함

 

 

끝.

반응형