ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [문자열 내림차순으로 배치하기,시저암호] feat.ASCII
    카테고리 없음 2023. 4. 10. 22:19

    문제 설명

    문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

    제한 사항

    • str은 길이 1 이상인 문자열입니다.

    입출력 예

    s return
    "Zbcdefg" "gfedcbZ"
    function solution(s) {
      let len = s.split('').sort().reverse().join("")
      return len
    }
    console.log(solution("Zbcdefg"))

    이 문제는 처음에 배열로 만들어 준 후 내림차순해서 뒤집어 준 후에 다시 조인으로 합쳐서 코드를 완성했다.

     

    코드는 간결하지만 sort에서 알아야할 내용이 있었다.

     

    ASCII

    ASCII(아스키)는 American Standard Code for Information Interchange의 약어로, 미국 정보 교환 표준 코드를 의미한다.

    이는 컴퓨터와 통신에서 문자를 표현하는 데 사용되는 일련의 코드이다.

     

    ASCII는 7비트 이진수 코드 체계로, 총 128개의 문자를 표현할 수 있습니다. 이러한 문자는 알파벳(대문자 및 소문자), 숫자, 특수 문자 등을 포함한다.

     

    예를 들어, 대문자 'A'는 ASCII 코드 65에 해당하고, 소문자 'a'는 ASCII 코드 97에 해당한다.

     

    위 문제도 ASCII를 통해서 알파벳 마다 아스키코드를 이용해서 sort()로 오름차순, 내림차순을 할 수 있다. 

    charCodeAt()

    문자열을 charCodeAt를 이용해서 아스키코드로 반환도 가능하다.

     

    아래는 아스키코드를 이용한 알고리즘 문제이다.


    어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

    제한 조건

    • 공백은 아무리 밀어도 공백입니다.
    • s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
    • s의 길이는 8000이하입니다.
    • n은 1 이상, 25이하인 자연수입니다.

    입출력 예

    s n result

    "AB" 1 "BC"
    "z" 1 "a"
    "a B z" 4 "e F d"
    function solution(s, n) {
      const arrs = [...s]
      const newArr = []
      for (let i = 0; i < arrs.length; i++) {
        if (arrs[i].charCodeAt() !== 32) {
          if ((arrs[i].charCodeAt() + n) > 122) {
            newArr.push(arrs[i].charCodeAt() + n - 26)
          } else if ((arrs[i].charCodeAt()) < 122 && (arrs[i].charCodeAt()) >= 97) {
            newArr.push(arrs[i].charCodeAt() + n)
          } else if ((arrs[i].charCodeAt() + n) > 90) {
            newArr.push(arrs[i].charCodeAt() + n - 26)
          } else if ((arrs[i].charCodeAt()) < 90 && (arrs[i].charCodeAt()) >= 65) {
            newArr.push(arrs[i].charCodeAt() + n)
          }
        } else { newArr.push(arrs[i].charCodeAt()) }
      }
    
    
      const number = String.fromCodePoint(...newArr)
    
      return number;
    }

     

    지금까지 정렬은 그냥 사전순으로만 된다 ! 만 알고 있었는데 어떻게 되는지 원리를 알고나니 sort가 새롭게 다가왔다. 

     

Designed by Tistory.