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

해달·2022년 1월 1일
0

프로그래머스 시저암호


문제조건

주어진 n만큼 알파벳 위치에서 밀어서 출력 하기

문제풀이

알파벳의 총 개수는 25개이므로 배열을 만든 뒤 index를 확인하여 출력한다


작성코드

function solution(s, n) {
  const lower =  ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
  const upper = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
  let temp = s.split('')
  let answer = ''

  temp.forEach(el => {
      
    if(el === ' ') {
      answer.push(el)
    }

    else if(lower.includes(el)){
      let idx = lower.indexOf(el)
    else if(idx + n > 25){ 
         answer.push(lower[idx-25+n-1])
      } else { 
         answer.push(lower[lower.indexOf(el)+n])
      }
    }
      
    if(upper.includes(el)){
      let idx = upper.indexOf(el)
      if(idx + n > 25){ 
         answer.push(upper[idx-25+n-1])
      } else {  
         answer.push(upper[upper.indexOf(el)+n])
      }
    }
  })
    return answer.join('')
}

다른분 문제풀이(1)

function solution(s, n) {
    const upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    const lower = "abcdefghijklmnopqrstuvwxyz";
    let answer= '';
    for(let i =0; i <s.length; i++){
        const text = s[i];
        if(text == ' ') {
            answer += ' '; 
            continue;
        }
        const textArr = upper.includes(text) ? upper : lower;
        const index = textArr.indexOf(text)+n;
        if(index >= textArr.length) index -= textArr.length;
        answer += textArr[index];
    }
    return answer;
}

굳이 배열로 안하고 문자열로 만들어서 문제를 더 간단하게 풀 수 있었다
answer의 변수 안에 공백일 경우 += ' ' 로 공백을 쌓아주고
만들어놓은 알파벳문자열에서 어디에 속하는지 찾은다음 (textArr)
textArr에서 text의 위치를 찾아내어 n만큼 더하여서 index를 찾아낸다
만약 길이보다 크다면(25) index에서 길이만큼 제해준다.
그러고 나서 answer에 값을 쌓아준다.

위와 같은 방향으로 문제를 푼 건 맞지만 코드는 그보다 복잡하고 가독성도 안좋게 작성했다..
어떻게 하면 조금 더 가독성 있게 쓸 수 있는지 고민을 해보아야겠다
다른분들의 문제 풀이를 보는경우도 공부가 많이 되는것 같다


0개의 댓글