✏️기록하는 즐거움
article thumbnail

 

프로그래머스

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

programmers.co.kr

 

|  제출

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

  for (let i = 0; i < s.length; i++) {
    const word = s[i];

    if (word === " ") {
      answer += " ";
      continue;
    }

    const arr = upper.includes(word) ? upper : lower;
    let index = arr.indexOf(word) + n;

    if (index >= arr.length) index -= arr.length;

    answer += arr[index];
  }

  return answer;
}

 

|  풀이과정

소문자는 소문자 그룹 안에서, 대문자는 대문자 그룹 안에서 알파벳이 밀리고 있기 때문에 소문자로 이루어진 문자열 lower대문자로 이루어진 문자열 upper가 필요하다.

입력받은 문자열이 공백인지, 소문자인지, 대문자인지에 따라서 알파벳을 변경시키고 빈 문자열인 answer에 변경된 값들을 더해서 답을 완성시키면 된다.

 

신경써야할 부분은 "z"가 1 밀렸을 때 "a"가 된다는 것이다. 제출한 코드에서는 주어진 알파벳이 n만큼 더해진 인덱스가 알파벳이 속한 그룹의 길이보다 길다면 인덱스에서 그 길이만큼 빼주는 식으로 처리하였다.

 

++) upper, lower 문자열을 사용하는 것 외에도 a~Z까지의 아스키 코드를 사용하여 풀 수도 있다.

 

|  개념

String.prototype.includes()

  • 문자열이 특정 문자열을 포함하고 있는지에 따라 true, false로 반환한다.

String.prototype.indexOf()

  • 문자열에서 지정된 요소가 발견되는 첫 번째 인덱스를 반환하고 해당 값이 없으면 -1을 반환한다.

 

profile

✏️기록하는 즐거움

@nor_coding

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!