프로그래머스 시저 암호 문제 풀이

junghoon_you·2022년 7월 21일
0

풀이 과정
1.먼저 for문으로 문자열 길이만큼 반복해주고 if문을 써서 공백일경우 공백을 result에 더합니다.

for (let i = 0; i < s.length; i++) { //for문으로                                         문자열 반복
    if (s[i] === " ") result += " ";

2.공백이 아니라면 else문으로 넘어와 s문자열의charCodeAt(i)아스키코드 해당하는 문자를 숫자로 변환해주는 함수를 사용해 변수에 할당해 줍니다.

else {                          //공백이아닐 경우
      let charCode = s.charCodeAt(i);

3.그리고 만약 대문자라면 아스키코드문자를 숫자로 변환해준값에 이동한 길이 만큼을 더해줍니다.

if (charCode <= 90) {
        charCode += n;

4.여기서 한번더 if문으로 들어가 아스키코드숫자값이 90을 넘어버리게 되면 Z부터 다시 A로 가야하기 때문에 -26을 아스키코드 숫자값에서 빼줍니다.

if (charCode > 90) charCode -= 26;

5.이제 소문자일 경우에 코드도 작성을 위와 같이 비슷하게 해주고

else {
        charCode += n;
        // 변경 후 아스키코드값이 122보다 크다면
        if (charCode > 122) charCode -= 26;
      }

6.마지막으로 숫자로 변환한 아스키코드값을 다시 아스키코드 문자로 바꿔주어야 하기때문에 result값에 문자열로 변경한 아스키코드 값을 넣어주게 되면

result += String.fromCharCode(charCode);

그리고 리턴을 해주게 되면

function solution(s, n) {
    let result = "";
  for (let i = 0; i < s.length; i++) { //for문으로                                         문자열 반복
    if (s[i] === " ") result += " "; //if문을 써서                                      공백일경우 공백을                                      result에 더함
    else {                          //공백이아닐 경우
      let charCode = s.charCodeAt(i);// s의 알파벳을                                     변수에 할당
      // 원래 대문자라면
      if (charCode <= 90) {
        charCode += n;
        // 변경 후 아스키코드값이 90보다 크다면
        if (charCode > 90) charCode -= 26;
      }
      // 원래 소문자라면
      else {
        charCode += n;
        // 변경 후 아스키코드값이 122보다 크다면
        if (charCode > 122) charCode -= 26;
      }
      result += String.fromCharCode(charCode);
    }
  }
    
    
    
    return result;
}

profile
안녕하세요 코린이 입니다.

0개의 댓글