(1) 문제링크

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

(2) 문제풀이 및 해설 1

문제풀이

let s = "a B z"
let n = 4;

function solution1(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;
}

console.log(solution1(s, n)); // e F d

문제해설

  1. 대문자, 소문자, 빈 문자열이 할당되어있는 변수를 만든다.
  1. 반복문을 이용하여 문자열을 차례대로 비교한다.
  2. 문자가 공백인 경우 공백을 반환해야하므로 조건문을 이용하여 공백일 경우 공백을 반환하며 continue를 통해 공백인 경우 아래 코드를 무시하고 다음 반복문을 실행한다.
  3. textArr변수에 includes()메서드로 boolean값을 추출한 뒤 대문자일 경우 좌항, 소문자일 경우 우항을 할당한다.
  4. 전체 문자열 textArr변수안에 indexOf()메서드로 문자의 index를 찾아내고 그 index에 n을 더한 값을 index변수에 할당한다.
  5. index의 값이 전체 문자열의 길이보다 큰 경우 (s의 문자가 Z,z일 경우) 조건문을 만든다. index값에 textArr.length를 빼주어 재할당한다.
  6. answer변수에 textArr[index]를 할당한 뒤 출력한다.

(2) 문제풀이 및 해설 2

문제풀이

let s = "a B z"
let n = 4;

function solution2(s, n){
    return s.split("").map(value => {
        if (value === " ") return value;
        return value.toUpperCase().charCodeAt() + n > 90
        ? String.fromCharCode(value.charCodeAt() + n - 26)
        : String.fromCharCode(value.charCodeAt() + n)
    }).join("");
}

console.log(solution2(s, n)); // e F d

문제해설

  1. split()메서드로 문자를 개별로 분리한 뒤 배열에 담는다.
  1. 개별로 분리한 각각의 배열 요소에 함수를 적용시키기 위해 map()메서드를 활용한다.
  2. 조건문을 통해 문자가 공백일 경우는 문자 그대로 출력한다.
  3. 미국 표준 정보교환 코드인 아스키코드(10진수)를 활용하는데 첫번째로 value를 toUpperCase()메서드를 통해 대문자로 변환시킨 뒤 charCodeAt()메서드로 문자열을 아스키코드 값으로 바꾼다. 아스키코드로 바꾼 값을 n값과 더한 뒤 그 결과값이 90이상일 경우 true, 90미만일 경우 false를 출력한다. 이유는 아스키코드 90을 넘어가는 값을 찾아내기 위해서인데 90을 넘어가는 값은 Z를 넘어가는 값이기 때문이다.
  4. 결과값이 true인 경우 value의 아스키코드 + n에 26을 빼주어 A부터 시작한 값을 출력한다. 또한 아스키코드를 문자열로 변환시키기 위해 String.fromCharCode() 매서드를 활용한다.
  5. 결과값이 false인 경우 value의 아스키코드 + n 값을 출력한다. 또한 아스키코드를 문자열로 변환시키기 위해 String.fromCharCode() 매서드를 활용한다.
  6. 배열의 담긴 각각의 요소를 join()메서드를 통해 하나의 값으로 만든다.

(2) 문제풀이 및 해설 3

문제풀이

let s = "a B z"
let n = 4;

function solution3(s, n) {
    var chars = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXY                          "
    return s.split('').map(e => chars[chars.indexOf(e)+n]).join('');
}

console.log(solution3(s, n)); // e F d

문제해설

  1. 문제의 조건 중 n은 25 이하인 것을 활용하여 문자가 z인 경우 최대 25까지 밀리는 것을 감안하여 문자를 중복하여 작성한 후 chars변수에 할당한다.
  1. split()메서드로 문자를 개별로 분리한 뒤 배열에 담는다.
  2. 개별로 분리한 각각의 배열 요소에 함수를 적용시키기 위해 map()메서드를 활용한다.
  3. 전체 문자열에서 해당 요소 e의 index를 indexOf()메서드로 추출한 뒤 n과 더한 값을 chars의 index값으로 하여 추출한다.
  4. 배열의 담긴 각각의 요소를 join()메서드를 통해 하나의 값으로 만든다.

(2) 문제풀이 및 해설 4

문제풀이