본문 바로가기

프로그래머스 문제/Level 1

[프로그래머스] 시저 암호 - 자바스크립트

문제 설명

 

 

 

문제 풀이

  시저 암호의 대소문자 구문이 조금 어려웠던 문제였다. 나의 풀이는 크게 4가지 단계로 나뉘어져 있다.

 

 

1. 알파벳들을 모두 배열로 바꾼다.

  let lower = 'abcdefghijklmnopqrstuvwxyz'
  let upper = lower.toUpperCase();
  let arrLower = lower.split('');
  let arrUpper = upper.split('');
  let arrTempIndex = [];
  let answer = [];

 

2. 받아온 문자열 s의 배열을 알파벳 배열에서 찾아 인덱스 번호로 바꿔준다.

for(let i = 0; i <= s.length - 1; i++) {
    if(s[i] === ' ') {
      arrTempIndex.push(' ');
    } else if(s[i]===s[i].toLowerCase()){
      arrTempIndex.push(arrLower.indexOf(s[i]));
    } else {
      arrTempIndex.push(arrUpper.indexOf(s[i]));
    }
  }

 

3. 인덱스 번호를 n만큼 증가 시킨다.

let arrPlusIndex = arrTempIndex.map(x => (x + n) % arrLower.length);

 

4. 증가 시킨 인덱스 번호로 알파벳 배열에서 결과로 넣어준다.

for(let i = 0; i <= arrTempIndex.length - 1; i++) {
    if(arrTempIndex[i] === ' ') {
      answer.push(' ');
    } else if(s[i]===s[i].toLowerCase()) {  
      answer.push(arrLower[arrPlusIndex[i]]);
    } else {
      answer.push(arrUpper[arrPlusIndex[i]]);
    }
  }
  return answer.join('') ;

 

5. 전체 코드

function solution(s, n) {
  let lower = 'abcdefghijklmnopqrstuvwxyz'
  let upper = lower.toUpperCase();
  let arrLower = lower.split('');
  let arrUpper = upper.split('');
  let arrTempIndex = [];
  let answer = [];

  // s인 인덱스 값을 lower배열에서 찾아 인덱스 값 담기
  for(let i = 0; i <= s.length - 1; i++) {
    if(s[i] === ' ') {
      arrTempIndex.push(' ');
    } else if(s[i]===s[i].toLowerCase()){
      arrTempIndex.push(arrLower.indexOf(s[i]));
    } else {
      arrTempIndex.push(arrUpper.indexOf(s[i]));
    }
  }

  // n만큼 증가한 인덱스 값 추출하기
  let arrPlusIndex = arrTempIndex.map(x => (x + n) % arrLower.length);

  // 받아온 인덱스 값으로 띄어쓰기는 다시 띄어쓰기 하고 소문자라면 소문자꺼 넣고 아니면 대문자꺼 넣는다.
  for(let i = 0; i <= arrTempIndex.length - 1; i++) {
    if(arrTempIndex[i] === ' ') {
      answer.push(' ');
    } else if(s[i]===s[i].toLowerCase()) {  
      answer.push(arrLower[arrPlusIndex[i]]);
    } else {
      answer.push(arrUpper[arrPlusIndex[i]]);
    }
  }
  return answer.join('') ;
}

 

 

실행 결과

 

 

 

코드 채점하고 제출