[level 1] 시저 암호

2022. 1. 14. 12:33·알고리즘/JavaScript

문제

 

풀이 코드

function solution(s, n) {
  let asciiCode = s.split('').map((ch) => {
    let asciiNum = ch.charCodeAt() + n;

    if (ch === ' ') return ch;
    return ch.toUpperCase().charCodeAt() + n > 90
      ? String.fromCharCode(asciiNum - 26)
      : String.fromCharCode(asciiNum);
  });
  return asciiCode.join('');
}

 

풀이 과정

어려웟다 아스키를 어떻게 사용해야할지 어떤 조건을 맞춰야 할지 한참을 생각했다.

풀이 과정은 다음과 같이 풀었다

 

1. asciiCode 라는 변수에 Ascii로 변환후, 다음 값을 계산해서 다시 문자로 저장했다.
2. Array.charCodeAt() 함수를 통해 해당 문자의 아스키 코드 값으로 변경할수 있다.
3. 일단, 해당 문자를 대문자로 변환한후, 변환된 문자의 아스키값에 n 만큼 더하여, 이 값이 90보다 크면 ( 'Z' 보다 크면 ) 26을 빼주어, 문자의 범위에서 계산되게 하고, 그렇지 않다면 문자 자체를 반환하게 했다.
4. 핵심은, 조건에서 대문자로 변환하여 이 값이 문자의 범위를 넘기는지 확인하고, 실제 계산할때는 대문자로 변환된 값으로 계산하면 안된다!!!
5. 마지막에 join 함수를 통해 문자열로 만들어 반환해 주었다.

 

다른사람의 풀이

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

다른 사람은 아스키 코드를 안썻다

코드가 길긴 하지만, 이 코드가 훨씬 가독성 측면에서 좋다고 느껴졌다

 

배열을 이용한 구현이라니

'알고리즘/JavaScript' 카테고리의 다른 글
  • [level 1] 수박수박수?
  • [level 1] 약수의 합
  • [level 1] 3진법 뒤집기
  • [level 1] 정수 내림차순으로 배치하기
Jeohong
Jeohong
기억 보단 기록을
  • Jeohong
    Chikong Devlog
    Jeohong
  • 전체
    오늘
    어제
    • 분류 전체보기 (186)
      • ---- 개발 컨텐츠 ---- (0)
      • iOS (30)
        • Swift 문법 (1)
        • iOS 개념 (12)
        • HIG (5)
        • SwiftUI (7)
        • UIKit (4)
      • Side Project (0)
      • 개발서적 (4)
        • 객체지향 사실과 오해 (4)
      • 알고리즘 (74)
        • 자료구조 개념 (2)
        • Swift (25)
        • JavaScript (47)
      • ---- 회고 계획 컨텐츠 ---- (0)
      • 계획 및 일기 (10)
      • 회고록 (1)
      • 컨퍼런스 탐방 (1)
      • 미드로 영린이 탈출하기 (1)
      • ---- Previous content ---- (0)
      • Frontend (2)
        • HTML & CSS (2)
      • KITRI 수업 (17)
        • 리눅스 (14)
        • 네트워크 (2)
      • 42seoul (17)
        • Bonr2code (9)
        • 넋두리 (7)
        • 멘토특강 (1)
      • 해킹 실습 (20)
        • 해커스쿨 - F.T.Z (19)
        • WebGoat (1)
      • Tensorflow로 시작하는 NLP (1)
        • 예제 (1)
      • 자연어처리 입문 (1)
        • 이론 (1)
      • 텐서플로로 배우는 딥러닝 (7)
        • 이론 (2)
        • 예제 (5)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    개발자
    자료구조
    본과정
    42서울
    프로그래머스
    boj
    네트워크
    알고리즘
    IOS
    SwiftUI
    1서클
    hig
    라피신
    스위프트
    코딩
    javascript
    swift
    Algorithm
    42seoul
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Jeohong
[level 1] 시저 암호
상단으로

티스토리툴바